当前位置: 首页 > 面试题库 >

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

廖君昊
2023-03-14
问题内容

是否可以创建一个java.util.Date保证为UTC且在过去特定时间(例如一个小时前或一天前)的对象,这是一个好主意吗?

我已经审查了4小时之前的堆栈溢出问题获取日期及其答案。但是我想避免添加更多的依赖项,例如jodaTime和,并且可接受的答案使用的System.currentTimeMillis()将是本地时区,不是吗?


问题答案:

正如评论中生动讨论的那样,建议使用该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



 类似资料:
  • 问题内容: 如何从Swift XCode中的日期创建日期对象。 例如在JavaScript中,你会做: 问题答案: 雨燕有自己的类型。无需使用。 在Swift中,日期和时间存储在64位浮点数中,该浮点数用于测量自2001年1月1日UTC的参考日期以来的秒数。这在结构中表示出来。以下内容将为您提供当前日期和时间: 若要创建其他日期时间,可以使用以下方法之一。 方法一 如果您知道2001年参考日期之前

  • 问题内容: public static void main(String[] args) { 它打印: 如何与SQL同时保存SQL ?我需要能够从任何地方获取信息,并将其转换为世界那部分的任何时间。问题在于,它与我的系统时钟设置的时间保持相同的时间。 问题答案: 最好从a 获取而不是从a获取。 第一步是将您的并将其转换为GMT: 然后,您可以通过将其转换为:

  • 问题内容: 我有这段代码,它每天早上7点运行一个通知,它获取当前日期,然后在到达设定的时间时运行该通知,我的问题是,如果时间已经超过了设定的运行时间,那么它将每天在用户当前时间不是我早上7点的时间,这是我的代码 如您所见,它每天早上7点运行。我不知道,即使时间是早上7点以后,通知在第二天仍将继续运行,将不胜感激 问题答案: 更新了@ Paulw11对Swift 3.0的回答,并包装在一个函数中:

  • 我试图设置一个作业在一个用户使用Quartz的时区的特定时间的单一执行。现在,开箱即用,告诉调度器执行时区中的任何内容的唯一方法是通过。对于Coors,我可能会将datetime转换为cron表达式,然后在第一次成功执行后立即停止触发器,但这有点难闻。 谢谢,

  • 我有当前的毫秒utc/unix时间,现在我想将其转换为特定时区的日期时间,例如EST utc-5(纽约)。 我使用以下方法获得当前的毫秒/ unix时间: 现在我想把这个长值转换成一个特定的时区。 我如何使用 Joda time 做到这一点,因为我听说这是最好的库,但 API 对我来说似乎有点混乱。

  • 我不想使用 库,因为我正在处理的项目需要文书工作来引入依赖项。如果我能在没有第三方库的情况下实现这一目标,我会更高兴。 我很难在CET和UTC之间转换日期,因为日期是夏时制。这与我预期的相差一个小时: CET比UTC提前一小时,夏季提前2小时。因此,我预计中欧在盛夏的10点30分将达到协调世界时的8点30分。 功能是: 我使用两个时区信息对象: