Как я могу получить точную метку текущего времени UTC на time4j без использования системного часового пояса и системных часов?

Там!

Я должен получить точное текущее время UTC без вызова системных часов или системного часового пояса. Мне нужно получить точное время UTC через библиотеку Time4j.

Проблема в том, что после получения времени UTC разными способами существует несоответствие в точности с точным временем UTC, в частности - несоответствие в секундах. И это очень важно для меня.

Мне нужно получить точную метку времени UTC из-за несоответствия на моей машине более 5 секунд и текущего времени UTC. Я должен передать эту метку времени в 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");

Я не получил необходимой точности этими методами.

Есть ли способы, как я могу получить фактическую метку времени UTC с очень высокой точностью до секунд через time4j?

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
Другие вопросы по тегам