2

我想知道Java的时间到了。它是根据系统更新还是需要系统时间并在运行时从那里开始。

例如,我将使用 java.util.Date 来抽时间。当我调用一个方法从这个类中获取时间时,时间从哪里来,并且根据我的调用来获取时间,它是从系统检查它还是调用虚拟机中的内部时钟。

4

3 回答 3

8

查看 java.util.Date 的构造函数

public Date() {
    this(System.currentTimeMillis());
}
于 2013-05-23T16:07:30.643 回答
3

直接来自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 是二月,以此类推;因此 11 是 12 月。日期(月中的某天)通常以 1 到 31 的整数表示。一个小时用 0 到 23 的整数表示。因此,从午夜到凌晨 1 点的小时是 0 小时,从中午到下午 1 点的小时是 12 小时。分钟用 0 到 59 的整数表示惯用的方式。秒用 0 到 61 的整数表示;值 60 和 61 仅出现在闰秒中,即使如此,也仅出现在实际正确跟踪闰秒的 Java 实现中。由于目前引入闰秒的方式,在同一分钟内出现两个闰秒的可能性极小,但本规范遵循 ISO C 的日期和时间约定。在所有情况下,为这些目的提供给方法的参数不必落在指定的范围内;例如,日期可以指定为 1 月 32 日,并被解释为 2 月 1 日。

于 2013-05-23T16:08:40.810 回答
2

它来自底层操作系统,传统的 JVM 本身不保留内部运行时钟

于 2013-05-23T16:07:51.307 回答