在不使用系统时区和系统时钟的情况下,如何在time4j获得准确的UTC当前时间戳?

时间:2018-08-19 12:51:28

标签: java datetime time timestamp time4j

有!

我必须获得准确的当前UTC时间,而无需调用系统时钟或系统时区。我需要通过Time4j库获取准确的UTC时间。

以下问题:通过不同方式获取UTC时间后,准确度与精确UTC时间不匹配-单位为秒。这对我来说至关重要。

我需要获取准确的UTC时间戳,因为不匹配的时间超过了我的计算机和当前UTC时间超过5秒。我必须将此时间戳传送到他的tern更新数据库中的API和API中。我每秒执行一些操作,在实际情况下,由于时间不够准确,我无法执行此操作。

下面是一些我测试过的示例,以获取当前的UTC时间戳:

Moment moment = Moment.UNIX_EPOCH;

First:
PlainTimestamp test1 = SystemClock.inZonalView("UTC").now();

Second:
Moment test2 = Moment.nowInSystemTime();

Third:
PlainTimestamp test3 = moment.toLocalTimestamp();

Forth:
PlainTimestamp test4 = Moment.nowInSystemTime().toZonalTimestamp("UTC");

那些方法没有达到我要求的准确性。

有什么方法可以通过time4j获得非常精确的实际UTC时间戳?

1 个答案:

答案 0 :(得分:1)

您的代码示例最终都基于System.currentTimeMillis()。如果您使用此简单的时钟观察到较低的准确性,则可以选择以下两种方式:

  • 按照JB Nizet的建议定期将您的操作系统与NTP服务器同步

  • 或者您可以使用包含备用时钟的软件包net.time4j.clock

示例:

  SntpConnector clock = new SntpConnector("ptbtime1.ptb.de"); // ntp-server-address
  clock.connect(); // requires internet connectivity, performs the synchronization
  Moment utc = clock.currentTime()); // can be called without actual internet access