java - System.currentTimeMillis() 和夏令时

标签 java android

我想知道 System.currentTimeMillis() 是否考虑了 android 上的夏令时。

假设我打电话 x = System.currentTimeMillis();

然后十秒后,由于夏令时,操作系统将时钟调慢一小时。

现在我打电话 y = System.currentTimeMillis();

xy 哪个更大?

我问这个是因为如果我手动更改时钟,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/

相关文章:

android - Mac OS X 发送 adb shell am start intent string extra with space characters

java - Android 地理编码功能不如 iOS

java - 如何打印我的 Java 对象而不得到 "SomeType@2f92e0f4"?

android - 如何在每个选项卡下添加 Activity ?

android - com.android.ide.eclipse.adt.DEPENDENCIES - 这个符号引用的值集在哪里?

android - 膨胀类 android.support.v7.widget.SearchView 时出错

java - 如何用不同的 List<Objects> 重构方法

java - Thymeleaf:如何在不迭代的情况下从列表或数据库中检索元素?

java - 如何让我的网络服务器等待?

Android API 21+ - 以编程方式在 TimePickerDialog 中隐藏模拟时钟