我很惊讶java.sql.Date
有方法toLocalDate()
。
java.util.Date
或java.time.Instant
没有类似的方法。似乎在java.time
中,必须始终提供ZoneId
来获取“LocalFoo”或“OffsetBar”。
来自java.sql.Date#toLocalDate()
的javadoc:
将此Date对象转换为LocalDate。 转换创建了一个 LocalDate表示与本地日期相同的日期值 时区
哪个时区是“当地时区”?它是否依赖于数据库或JVM设置?
答案 0 :(得分:5)
从概念上讲,fr3d_ldap:
user:
usernameAttribute: sAMAccountName
与java.sql.Date
相同,即。没有时间或时区的日期。实际上,因为LocalDate
是基于java.sql.Date
毫秒实现的,所以它隐含地使用了系统时区。因此,存在long
方法,因为Java SQL规范引导您希望您将toLocalDate()
视为没有时区。
答案 1 :(得分:1)
给定一个包含修复毫秒值的java.sql.Date-Object,您将确实获得不同的LocalDate-Values,具体取决于系统上的Default-Timezone。
我尝试了以下Code-Snippet:
Certification.prototype = {indexAction: ...}
产生:
TimeZone.setDefault(TimeZone.getTimeZone("America/Los_Angeles"));
java.sql.Date sqlDate = new java.sql.Date(1465485798671l);
System.out.println(sqlDate.toLocalDate());
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Tokyo"));
System.out.println(sqlDate.toLocalDate());