首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >偏移电流系统对时区GMT的时间(毫秒)

偏移电流系统对时区GMT的时间(毫秒)
EN

Stack Overflow用户
提问于 2019-08-20 21:42:35
回答 2查看 155关注 0票数 0

我试图修改现有的java代码,以毫秒而不是秒的方式输出数据。

以秒为单位返回当前时间的现有代码:

代码语言:javascript
复制
currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);

输出currentTime = 1566311076

它说,使用划时代转换器

代码语言:javascript
复制
GMT: Tuesday, August 20, 2019 2:24:36 PM
Your time zone: Tuesday, August 20, 2019 7:24:36 AM GMT-07:00 DST

我试图修改java代码以返回GMT中的当前时间,在millisec中可以获得当前的系统时间,但是如何将结果与GMT时间相抵消。

代码语言:javascript
复制
currentTime = ZonedDateTime.now().toInstant().toEpochMilli();

输出currentTime = 1566336256566

假设这个时间戳以毫秒为单位

代码语言:javascript
复制
GMT: Tuesday, August 20, 2019 9:24:16.566 PM
Your time zone: Tuesday, August 20, 2019 2:24:16.566 PM GMT-07:00 DST

你知道吗,会非常赞同的。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-20 21:57:03

首先转换为Instant

代码语言:javascript
复制
currentTime = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli()

演示

代码语言:javascript
复制
System.out.println(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
System.out.println(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());

输出

代码语言:javascript
复制
1566323773
1566323773363
票数 1
EN

Stack Overflow用户

发布于 2019-08-21 06:36:17

当一个简单的存在时,为什么要用一种更复杂的方式呢?

代码语言:javascript
复制
    long currentTime;
    currentTime = System.currentTimeMillis();
    System.out.println(currentTime);

刚才输出的示例:

1566369127348

我强烈支持使用现代的java.time类,包括ZonedDateTime (可能不是很大的LocalDateTime)。然而,在这种情况下,一个简单的方法从Java诞生时就给了我们我们想要的东西。我认为使用它没有问题。如果您确实想使用java.time,请使用Instant

代码语言:javascript
复制
    currentTime = Instant.now().toEpochMilli();
    System.out.println(currentTime);

1566369127348

你的代码出了什么问题?

奇怪的是,你的旧代码是错误的。您的新尝试给出了自该时代以来正确的毫秒数。你的旧代码是:

代码语言:javascript
复制
    currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);

这将占用时区中当前的挂钟时间,或者更准确地说,在JVM的默认时区。然后,它错误地假设时间是以UTC为单位,并将时间从基于这个假设的时代转换为秒(当然,如果JVM的时区是UTC,您就会碰巧得到正确的结果)。

我建议您始终将时区(如果不是时钟)传递给now方法,以使您对时区的期望变得明确。no now使用JVM的默认时区,这是不可靠的,因为设置可能会意外更改,并可能造成混乱。如果在上面的代码行中已经说明了时区,我们就可以一目了然地看到它是否与事后假定的UTC一致。例外是Instant.now():它不需要时区,因为它在所有时区都会给出相同的结果。

您在欧洲/哥本哈根时区我的计算机上的旧代码的输出是:

1566376327

您可以看到,它与我们之前得到的毫秒值不一致(在本例中是提前两个小时,在您的例子中是落后了7个小时)。

你的问题似乎已经发布了一些时间在晚上10点左右(22:00)格林尼治时间(下午3点在偏移-07:00),所以你的结果都不符合时间。有些时候从运行代码到发布问题,或者您的计算机时钟设置得不正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57581894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档