【发布时间】:2018-07-15 01:13:48
【问题描述】:
我正在尝试将 yyyy-MM-dd 字符串格式的日期转换为 datastax 的 LocalDate。我正在使用以下代码来做到这一点。
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
public static LocalDate getDate(String date) throws ParseException {
Date d = DATE_FORMAT.parse(date);
return LocalDate.fromMillisSinceEpoch(d.getTime());
}
当我测试这个方法时,我没有得到预期的结果。
public static void main(String[] args) throws ParseException {
System.out.println(getDate("2017-11-22"));
}
// Actual Output:
2017-11-21
// Excpected Output:
2017-11-22
这里有什么我遗漏的吗?
【问题讨论】:
-
Date d输出什么? -
时区问题。当您所在时区的 11 月 22 日 00:00:00 时,UTC 仍然是 11 月 21 日,我希望
LocalDate.fromMillisSinceEpoch()使用它,因为您没有告诉它时区。 -
日期 d 给出
Wed Nov 22 00:00:00 IST 2017输出。我检查了它在 JavaScript 中的纪元值,它也给出了Wed Nov 22 2017 00:00:00 GMT+0530 (IST)。 -
SimpleDateFormat类早已过时并且出了名的麻烦。对于您的任务java.time,现代 Java 日期和时间 API 显然更适合,所以我建议您使用它而不是Date和SimpleDateFormat。 -
Ole V.V. 的解决方案比我的更优雅...我总是忘记新的 Date API...
标签: java date cassandra datastax localdate