如何在过去的特定时间使用UTC创建Date对象?

如何在过去的特定时间使用UTC创建Date对象?,第1张

如何在过去的特定时间使用UTC创建Date对象?

正如评论中生动讨论的那样,建议使用该

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



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5135094.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存