栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在过去的特定时间使用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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438892.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号