来自 ZonedDateTime UTC 实例的 Java 日期和时间戳tl;博士使用 java.time关于 java.time
我有一个Java应用程序,我希望在UTC中的时间。目前,该代码混合使用 和 。为了获得UTC的时间,我之前的程序员使用了:java.util.Date
java.sql.Timestamp
对于日期:
Date.from(ZonedDateTime.now(ZoneOffset.UTC)).toInstant();
对于时间戳:
Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
但是,我自己使用此代码运行了多个测试,并且这两行都返回当前日期/时间(以我当前的时区)。从我读过的所有内容来看,日期/时间戳似乎没有zoneOffset值,但我找不到这方面的具体陈述。
是否无论如何都要将时区 (UTC) 保留在 Date 或 Timestamp 对象中,或者我是否需要在整个应用程序中执行一些重构并使用实际的 ZonedDateTime 对象?此外,此 ZonedDateTime 对象是否与 sql 的当前时间戳对象兼容?
例:
public static void main (String args[])
{
ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneOffset.UTC);
Timestamp timestamp = Timestamp.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
Date date = Date.from(ZonedDateTime.now(ZoneOffset.UTC).toInstant());
System.out.println("ZonedDateTime: " + zonedDateTime);
System.out.println("Timestamp: " + timestamp);
System.out.println("Date: " + date);
}
输出:
ZonedDateTime: 2017-04-06T15:46:33.099Z
Timestamp: 2017-04-06 10:46:33.109
Date: Thu Apr 06 10:46:33 CDT 2017