System.currentTimeMillis()返回的值是否受Day Light Savings和Leap Second调整的影响?

Gee*_*eek 7 java time datetime dst

我知道,System.currentTimeMillis()自纪元以来,它给出了以毫秒为单位的时间,并且它对系统的挂钟时间很敏感.我也知道不建议用来System.currentTimeMillis()计算测量时间的程序中的经过时间.Java库已经System.nanoTime()为此提供了帮助.

我有两个具体问题System.currentTimeMillis():

  1. 是否会受到闰秒调整的影响?我认为答案是肯定的,因为系统的挂钟时间会因闰秒而调整.
  2. DST(DayLight Savings)打开/关闭时是否会受到影响?当时间从23:59突然变为2:00时会发生什么?由于系统时钟实际上发生了变化,我认为答案是肯定的,但我想与社区联系.

JB *_*zet 10

返回的值System.currentTimeMillis()是自纪元以来经过的毫秒数.这个毫秒数就是:毫秒.

假设在某一天,由于DST,您所在的国家/地区决定立即从1:00到2:00.这是否意味着在1:00到2:00之间已经过了1小时?0毫秒已经过去了.您所在的国家/地区只是决定将毫秒值X表示为1:00,并将毫秒X + 1表示为2:00.时间的表示不会改变毫秒.

  • 它不是*实际的SI毫秒数,除非TAI(或类似的时间尺度)用于`currentTimeMillis()`(不太可能).要获得实际的毫秒数,您需要添加事件之间的闰秒数差异.特别清楚的是,如果你试图找到"2012-06-30T23:59:59Z"和"2012-07-01T00:00:00Z"之间的区别 - "currentTimeMillis()"返回"1000"但实际数字是'2000`. (2认同)