正如评论中生动讨论的那样,建议使用该
java.time软件包。简单的解决方案:
Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4));System.out.println(fourHoursAgo);
这个刚印出来
2018-01-31T14:57:44.667255Z
由于现在是UTC时间
18:58,因此输出就是您所要求的。在
Instant本身偏移中性。它
toString使用UTC交付时间,但是在生产时没有提到UTC
Instant,因此我不确定它是否能满足您的需求。稍后,我将为您提供 明确显示 在UTC中的结果。
但是首先,如果确实需要一个
java.util.Date,通常对于您无法更改的旧版API来说,则转换很容易:
Date oldfashionedDate = Date.from(fourHoursAgo);System.out.println(oldfashionedDate);
在我所在
Europe/Copenhagen时区的计算机上打印:
Wed Jan 31 15:57:44 CET 2018
同样,这与运行代码段之前四个小时的时间一致。再说一次,其中
Date没有UTC偏移量。只有其
toString方法可获取JVM的时区设置,并将其用于生成字符串,这不会影响
Date。请参阅堆栈溢出问题,如何设置java.util.Date的时区?,及其答案。
如所承诺的,如果您不仅需要表示时间,还需要表示偏移量,请使用
OffsetDateTime:
OffsetDateTime fourHoursAgoInUtc = OffsetDateTime.now(ZoneOffset.UTC).minusHours(4);System.out.println(fourHoursAgoInUtc);
这印
2018-01-31T14:57:44.724147Z
Z最后表示从UTC或“祖鲁时区”(不是真正的时区)偏移零。转换为a
Date并不比以前复杂得多,但是再次,您将丢失转换中的偏移信息:
Date oldfashionedDate = Date.from(fourHoursAgoInUtc.toInstant());System.out.println(oldfashionedDate);
打印:
Wed Jan 31 15:57:44 CET 2018
链接:
Oracle教程介绍如何使用
java.time
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)