我想知道 System.currentTimeMillis() 是否考虑了 android 上的夏令时。
假设我打电话
x = System.currentTimeMillis();
然后十秒后,由于夏令时,操作系统将时钟调慢一小时。
现在我打电话
y = System.currentTimeMillis();
x
和 y
哪个更大?
我问这个是因为如果我手动更改时钟,x
大于 y
。所以我想知道在计算 System.currentTimeMillis()
返回的 long 值时是否考虑了夏令时。似乎无法在文档中找到任何内容。
最佳答案
不,夏令时没有影响
if System.currentTimeMillis() accounts for daylight savings
没有。
Daylight Saving Time (DST)与 System.currentTimeMillis
无关.
对 System.currentTimeMillis
的调用为您提供自 1970 年第一刻以来的毫秒数 UTC , 1970-01-01T00:00:00Z
。闰秒没有调整。
DST 的定义和重新定义是无聊的/未受过教育的/疯狂的政客的一时兴起。 DST 仅适用于他们在一个或多个特定时区的管辖区。
DST 转换是异常现象,会中断 wall-clock time对于一个地区的公民。但是space-time不会因 DST 切换而弯曲或扭曲,时间继续顺畅地流动。该时间流由 System.currentTimeMillis
衡量,不考虑本地政客的阴谋。
即时
System.currentTimeMillis()
方法现已过时。要获取当前时刻,请使用 java.time.Instant.now
.
Instant now = Instant.now() ;
虽然 Instant
可以装nanoseconds ,在 Java 9 及更高版本中,您可能会在 microseconds 中看到捕获的当前时刻。 . (Java 8 使用 milliseconds ,在 Java 9 及更高版本中新实现 Clock
之前。)
相比之下,System.currentTimeMillis
调用限制为毫秒。
获取自 epoch reference 以来的毫秒数1970 年的第一刻 UTC , 1970-01-01T00:00Z, 调用 Instant::toEpochMilli
.当然,请注意数据丢失,因为任何微秒或纳秒都会从结果中截断为毫秒。
long millisecondsSinceEpoch = Instant.now().toEpochMilli() ;
Instant
表示 UTC 中的一个时刻。因此,夏令时 (DST) 和政客造成的类似异常没有影响。
关于java - System.currentTimeMillis() 和夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43055258/