【问题标题】:Why is Android System.currentTimeMillis() not an accurate Timestamp? [duplicate]为什么 Android System.currentTimeMillis() 不是准确的时间戳? [复制]
【发布时间】:2020-02-05 01:11:17
【问题描述】:

我在开发 Android 应用程序时遇到了一个看似非常不寻常的错误。

我的 MainActivity onCreate 方法中的以下代码:

long ts = System.currentTimeMillis();
System.out.println(ts);

返回值为1570469720537

根据unixtimestamp.com,这个时间是51736年

有人遇到过这个问题吗?有什么想法可能导致它吗?

【问题讨论】:

  • 那是以毫秒为单位的时间,而不是以秒为单位的纪元时间。
  • 如果你想要一个Unix时间戳,即从纪元开始的秒数,最简单最直接的方法是Instant.now().getEpochSecond()。它也很清楚你得到的是秒还是毫秒。

标签: java android time system unix-timestamp


【解决方案1】:

虽然纪元时间以秒为单位,但System.currentTimeMillis() 以毫秒为单位返回时间以提高准确性,这就是您在示例中看到的值。如果您将其除以 1000,您将获得以秒为单位的时间,该时间将转换为您期望的当前纪元时间。

您可以将值粘贴到此处以查看时间戳:https://www.epochconverter.com/

【讨论】:

  • "请注意,一般来说,Java 中的所有时间戳都以毫秒为单位。" java.time 中的除外,精度为纳秒级。
  • @OleV.V.这是一种倒退的说法。我试图(不成功,很明显)暗示有很多时间戳不是毫秒精度,所以这个陈述是错误的。
  • 我会把@AndyTurner 的评论(我一开始没有在适当的上下文中阅读,抱歉)更进一步。对我来说,Java 中的所有时间戳都具有纳秒精度。除了(大部分)我们不应该再关心的遗留问题,所以我们实际上可以忽略这个例外。
猜你喜欢
  • 2020-09-17
  • 2013-03-11
  • 1970-01-01
  • 2020-03-04
  • 2014-12-18
  • 2020-09-09
  • 2017-09-12
  • 2019-03-04
  • 1970-01-01
相关资源
最近更新 更多