【问题标题】:How System.currentTimeMillis()/1000 working in JAVA [duplicate]System.currentTimeMillis()/1000 如何在 JAVA 中工作 [重复]
【发布时间】:2019-02-02 08:11:16
【问题描述】:

我只是想了解 System 类中的 currentTimeMillis()/1000L 方法。据我了解,此方法将以秒为单位返回当前时间。我在这里有疑问如果我在 Local jvm (IST) 中运行相同的代码,并且远程框(Sanjose)将返回不同的值作为输出?

如果我们在美国和印度的不同 JVM 中运行代码,有人可以解释一下它是如何工作的,输出会是什么。它返回相同的输出吗?还是不一样?

【问题讨论】:

  • 无论您在哪个时区,它都使用 UTC。所以,是的,它在世界任何地方都是一样的。另见:stackoverflow.com/q/17271039/669576
  • 大多数人遗漏的重要一点是,如果两台计算机最近都没有与 NTP 同步,这一切都无关紧要。
  • 如果你想要秒而不是毫秒,我更喜欢Instant.now().getEpochSecond()。自己除以 1000 会更清楚。自己做时间换算是个坏习惯。

标签: java java-time


【解决方案1】:

它返回自 unix 纪元开始以来的毫秒数,与时区无关。因此,它应该返回相同的输出。

【讨论】:

  • 不会有区别吧?如果我们在不同的 JVM 中运行代码?像不同的国家。它会给出相同的输出吗?
  • 如果您同时在位于不同国家/地区的 2 个不同 JVM 中运行代码(但具有相同的实现),结果应该是相同的。因为,无论您身在何处,自 Unix 纪元开始以来经过的毫秒数都是一样的。
  • 谢谢。真的很有帮助。
  • 接受您的回答。
  • 如果其中一个设备时钟设置不正确,因为它使用系统时钟,它会有所不同。除此之外不会。
【解决方案2】:

代码将返回相同的输出,因为 .currentTimeMillis() 函数使用 UTC 时区而不是 JVM 的本地时区。

查看 Oracle 文档:https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#currentTimeMillis()

【讨论】:

    【解决方案3】:

    它给出了自纪元时间以来经过的毫秒数,即00:00:00 on 1 January 1970。它也被称为 Unix 时间。在此处了解更多信息https://en.wikipedia.org/wiki/Unix_time

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 2019-05-13
      • 1970-01-01
      相关资源
      最近更新 更多