Подтвердить что ты не робот

Есть ли секундомер для календаря?

Являются прыгающие секунды, обслуживаемые классом GregorianCalendar?

Если нет, любая сторонняя библиотека обслуживает его?

4b9b3361

Ответ 1

API java.util.Date говорит, что

"... хотя класс Date предназначен для отображения согласованного универсального времени (UTC), он может не делать этого точно, в зависимости от среды хоста виртуальной машины Java... Большинство компьютерных часов недостаточно точны чтобы иметь возможность отразить разницу в прыжках в секунду".

Wiki говорит

"Поскольку скорость вращения Земли изменяется в зависимости от климатических и геологических событий, секунды прыжка по UTC нерегулярно разнесены и непредсказуемы. Вставка каждой секунды прыжка по UTC обычно определяется примерно за шесть месяцев вперед Международной службой вращения Земли и опорных систем (IERS)"

то есть ни один класс не может знать о будущих решениях IERS.

Ответ 2

  • Секундные секунды не обслуживаются GregorianCalendar (представление исходного кода в Oracle показывает это - здесь дается явное предположение в 1 минуту = 60 секунд). Кроме того: Oracle теперь официально отказалась от второй поддержки поддержки - см. Bug-ID 4272347.
  • В Java нет стандартной сторонней библиотеки, поддерживающей прыжки секунд - даже не joda-time. Только специализированное программное обеспечение, такое как this, делает это.
  • Обратите внимание, что многие библиотеки говорят о прыжковых секундах, хотя не поддерживают, например java.util.Date(см. ответ Dorofeevs). Также JSR 310 много говорит, но не поддерживает эту функцию. Официально JSR 310 поддерживает UTC-SLS, который не учитывает секунды прыжка и описывает только смазывание резиновых секунд вокруг второго прыжкового события. Действительно, JSR 310 очень запутывает, поддерживает ли он время UNIX или UTC-SLS (см. Следующий пункт). И поскольку вторая секундная информация (github/threeten/issues/197) была удалена из базы кода JSR 310, абсолютно невозможно реализовать настоящий UTC секундные прыжки в рамках JSR 310. В лучшем случае вы можете ожидать приходящего внешнего модуля (Threeten-Extra) в качестве дополнения для JSR 310, который в лучшем случае обеспечит рудиментарную поддержку (это скорее перевод между временем UNIX и временной шкалой TAI, не более и использует, на мой взгляд, принципиально неправильную модель домена).
  • System.currentTimeMillis() официально относится к таймеру ОС. И поскольку все ОС, которые я знаю, включая Microsoft, Linux и Apple, основаны только на спецификации UNIX, этот системный таймер java не учитывает секунды прыжка, только нормальные миллисекунды с 1970-01-01T00: 00: 00.000Z
  • Из-за всех этих фактов я решил создать свою собственную дату и время java-библиотеку с именем Time4J, которая полностью поддерживает прыжковые секунды и доступен как v1.0 с лицензией LGPLv2.1. A статья dzone демонстрирует, как эта поддержка выглядит с версией v4.2.