如何在不使用系统时区和系统时钟的情况下在 time4j 获得准确的 UTC 当前时间戳?
How can I get exact UTC current time stamp at time4j without usage of system timezone and system clock?
有!
我必须在不调用系统时钟或系统时区的情况下获得准确的当前 UTC 时间。我需要通过 Time4j 库获得精确的 UTC 时间。
通过不同方式获取 UTC 时间后,准确度与确切的 UTC 时间不匹配的问题 - 以秒为单位的不匹配。这对我来说很重要。
我需要获得准确的 UTC 时间戳,因为我的机器和当前的 UTC 时间不匹配超过 5 秒。 我必须将这个时间戳传输到 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 时间戳?
您的代码示例最终都基于System.currentTimeMillis()
。如果您使用这个简单的时钟观察到精度较低,那么您可以选择两种方式:
按照 JB Nizet 的建议定期将您的 OS 与 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
有!
我必须在不调用系统时钟或系统时区的情况下获得准确的当前 UTC 时间。我需要通过 Time4j 库获得精确的 UTC 时间。
通过不同方式获取 UTC 时间后,准确度与确切的 UTC 时间不匹配的问题 - 以秒为单位的不匹配。这对我来说很重要。
我需要获得准确的 UTC 时间戳,因为我的机器和当前的 UTC 时间不匹配超过 5 秒。 我必须将这个时间戳传输到 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 时间戳?
您的代码示例最终都基于System.currentTimeMillis()
。如果您使用这个简单的时钟观察到精度较低,那么您可以选择两种方式:
按照 JB Nizet 的建议定期将您的 OS 与 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