Как я могу получить точную метку текущего времени 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