【发布时间】:2013-09-19 16:06:57
【问题描述】:
我知道System.currentTimeMillis() 给出了自纪元以来的毫秒数,它对系统的挂钟时间很敏感。我也知道在测量时间的程序中使用System.currentTimeMillis() 来计算经过的时间是不可取的。
Java 库为此提供了System.nanoTime()。
我有两个具体问题要问System.currentTimeMillis():
- 是否会受到闰秒调整的影响?我认为答案是是的,因为系统的挂钟时间会因为闰秒而调整。
- DST(夏令时)开启/关闭时会受到影响吗?当时间突然从 23:59 变为 2:00 时会发生什么?由于系统时钟实际上发生了变化,我认为答案再次是是,但我想与社区核实。
【问题讨论】:
-
系统时钟不一定会在 DST 更改时更改。类 Unix 系统通常将其保持在 UTC。
-
@kiheru 那么系统托盘在 DST 触发后不会显示调整后的时间?
-
用户可见时间发生变化,但硬件时钟时间不变。
currentTimeMillis()on 例如solaris 使用gettimeofday()。那是自纪元以来的时间,与时区无关。我不知道窗户。 -
可以以令人惊讶的方式更改返回的时间的一件事是由 NTP 守护程序(或手动)完成的时间调整。因此,两个后续
currentTimeMillis()调用的时间差可能为负数。