我试图修改现有的java代码,以毫秒而不是秒的方式输出数据。
以秒为单位返回当前时间的现有代码:
currentTime = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC);输出currentTime = 1566311076
它说,使用划时代转换器
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时间相抵消。
currentTime = ZonedDateTime.now().toInstant().toEpochMilli();输出currentTime = 1566336256566
假设这个时间戳以毫秒为单位
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你知道吗,会非常赞同的。谢谢!
发布于 2019-08-20 21:57:03
首先转换为Instant:
currentTime = LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli()演示
System.out.println(LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
System.out.println(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());输出
1566323773
1566323773363发布于 2019-08-21 06:36:17
当一个简单的存在时,为什么要用一种更复杂的方式呢?
long currentTime;
currentTime = System.currentTimeMillis();
System.out.println(currentTime);刚才输出的示例:
1566369127348
我强烈支持使用现代的java.time类,包括ZonedDateTime (可能不是很大的LocalDateTime)。然而,在这种情况下,一个简单的方法从Java诞生时就给了我们我们想要的东西。我认为使用它没有问题。如果您确实想使用java.time,请使用Instant
currentTime = Instant.now().toEpochMilli();
System.out.println(currentTime);1566369127348
你的代码出了什么问题?
奇怪的是,你的旧代码是错误的。您的新尝试给出了自该时代以来正确的毫秒数。你的旧代码是:
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),所以你的结果都不符合时间。有些时候从运行代码到发布问题,或者您的计算机时钟设置得不正确。
https://stackoverflow.com/questions/57581894
复制相似问题