我想知道Java的时间到了哪里。它是基于系统更新还是需要系统时间并在运行时从那里开始。
例如,我将使用java.util.Date来占用时间。当我调用一个方法来从这个类中获取时间时,时间来自何处,并根据我的调用来获取时间,它是从系统中检查它还是调用vm中的内部时钟。
答案 0 :(得分:7)
请参阅java.util.Date的构造函数
public Date() {
this(System.currentTimeMillis());
}
答案 1 :(得分:2)
从the javadoc开始:
Date类旨在反映协调世界时(UTC),它可能不会完全这样做,具体取决于Java虚拟机的主机环境。几乎所有现代操作系统都假设在所有情况下1天= 24×60×60 = 86400秒。然而,在UTC中,每年或每两年大约有一次,称为“闰秒”。闰秒总是作为当天的最后一秒添加,并且始终在12月31日或6月30日。例如,由于增加了闰秒,1995年的最后一分钟长61秒。大多数计算机时钟都不够准确,无法反映闰秒的区别。
某些计算机标准是根据格林威治标准时间(GMT)定义的,相当于世界时(UT)。 GMT是该标准的“民用”名称; UT是同一标准的“科学”名称。 UTC和UT之间的区别在于UTC是基于原子钟,而UT是基于天文观测,对于所有实际目的而言,这是一种无形的精细分裂。由于地球的旋转不均匀(它减速并以复杂的方式加速),UT并不总是均匀流动。根据需要将闰秒引入UTC,以便将UTC保持在UT1的0.9秒内,UT1是应用了某些更正的UT版本。还有其他时间和日期系统;例如,基于卫星的全球定位系统(GPS)使用的时间尺度与UTC同步,但不会针对闰秒进行调整。一个有趣的进一步信息来源是美国海军天文台,特别是时间理事会:
http://tycho.usno.navy.mil
以及他们对“时间系统”的定义:
http://tycho.usno.navy.mil/systime.html
在接受或返回年,月,日,小时,分钟和秒值的所有Date类方法中,使用以下表示:
年y由整数y - 1900表示。 一个月由0到11的整数表示; 0是1月,1是2月,依此类推;因此11月是12月。 日期(月中的某天)以通常的方式由1到31的整数表示。 小时由0到23之间的整数表示。因此,从午夜到凌晨1点的小时是小时0,小时是从中午到下午1点。是12小时。 以通常的方式,分钟由0到59的整数表示。 第二个由0到61的整数表示;值60和61仅在闰秒发生,甚至仅在实际正确跟踪闰秒的Java实现中发生。由于当前引入闰秒的方式,在同一分钟内发生两个闰秒的可能性极小,但此规范遵循ISO C的日期和时间约定。 在所有情况下,为这些目的提供方法的论据不必落在指定的范围内;例如,日期可以指定为1月32日,并被解释为2月1日。
答案 2 :(得分:1)
它来自底层操作系统,传统的JVM本身并不保留内部运行时钟