使用哪个时区是java.sql.Date toLocalDate

时间:2016-06-09 11:54:06

标签: java java-8 java-time sqldatetime

我很惊讶java.sql.Date有方法toLocalDate()

java.util.Datejava.time.Instant没有类似的方法。似乎在java.time中,必须始终提供ZoneId来获取“LocalFoo”或“OffsetBar”。

来自java.sql.Date#toLocalDate()的javadoc:

  

将此Date对象转换为LocalDate。   转换创建了一个   LocalDate表示与本地日期相同的日期值   时区

哪个时区是“当地时区”?它是否依赖于数据库或JVM设置?

2 个答案:

答案 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());