Я работаю над проектом Java7, и нам нужна метка времени в международном атомном времени. Я нашел несколько других вопросов, касающихся JSR-310 и ThreeTen Project (который реализует JSR-310):
Как получить время GPS и время TAI в Java? < / а>
http://www.coderanch.com/t/549178/java/java/TAI-Atomic-Time-International
Однако я изо всех сил пытаюсь понять, что именно использовать для Java 7 и откуда его взять. Кажется, есть старые страницы SourceForge и GitHub для ThreeTen, а также страница OpenJDK.
Я нашел бэкпорт Java 7, но после загрузки его из Maven он не включает класс TAIInstant, который мне действительно нужен (класс TIAInstant указан в JavaDoc ThreeTen SourceForge в разделе javax.time.TAIInstant).
Для полноты, это отрывок из моего pom.xml:
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threetenbp</artifactId>
<version>0.8.1</version>
</dependency>
Следует ли мне использовать что-то еще и где мне это взять?
Примечание: извините, я не могу предоставить ссылки на все страницы, о которых я говорю, StackOverflow не позволит мне иметь> 2 ссылки на сообщение без более высокой репутации.
[EDIT] Причина, по которой я хочу использовать TAI, заключается в том, что мне нужна временная метка, которая монотонно увеличивается, что, как я считаю, выполняет TAI (даже в течение как положительных, так и отрицательных дополнительных секунд, поскольку все равно about високосных секунд считает все секунды одинаково, включая високосные секунды).
Прочитав о времени POSIX / Unix из различных источников, мне все еще не ясно, что именно происходит в Unix Time за дополнительную секунду. Я знаю, что Unix Time неоднозначно относится к UTC, но я не понимаю, что происходит в Unix Time в тот момент, когда возникает дополнительная секунда? Например, Unix Time "приостанавливает" или уходит назад? И, что, возможно, более важно, даже если это не должно соответствовать спецификации Unix Time, действительно ли реализации Unix подчиняются спецификации в отношении дополнительных секунд ...?
Наконец, правильно ли я говорю, что System.currentTimeMillis () получит эквивалент времени POSIX (хотя и в миллисекундах, а не в секундах)?
Обратите внимание: мне нужен объект, который можно переносить между JVM и машинами (исключая System.nanoTime () или аналогичный).
[ЗАКЛЮЧЕНИЕ]
TAI
TAI - это система измерения времени, в которой считается каждая секунда и «все секунды равны», т. е. каждая секунда состоит из одного и того же периода времени, и все секунды (включая дополнительные секунды) считаются в сумме. Это означает, что количество секунд в TAI (отсчитываемое от произвольной начальной точки, например, Unix Epoch) является монотонно увеличивающимся целым числом.
POSIX Time
POSIX Time - это стандарт (НЕ реализация) для измерения времени. Он определяет каждый день как имеющий ровно 86400 секунд. Следовательно, время POSIX не учитывает дополнительные секунды (поскольку иногда в минуте может быть 61 секунда, что приводит к дням с> 86400 секунд, а теоретически в минуте может быть 59 секунд, что приводит к дням с ‹86400 секунд). Это означает, что «секунды» в POSIX имеют переменную длину, и незадолго до / во время / после дополнительных секунд часы POSIX могут пропускать секунды или повторять их. В частности, спецификация POSIX, на которую ссылается Мено Хохшильд в своем ответе, гласит: «Связь между фактическим временем дня и текущим значением в секундах с начала эпохи не указана».
UTC
UTC - это стандарт времени, который связан с тем, как Земля движется вокруг Солнца, с целью поддержания взаимосвязи между положением Солнца и временем дня (в пределах порогового значения). ). То есть в регионе Земли по Гринвичу + 0 Солнце всегда находится на максимуме в полдень по всемирному координированному времени. Дополнительные секунды (положительные или отрицательные) необходимы, потому что скорость вращения Земли не фиксирована и не изменяется предсказуемым образом (это означает, что мы не можем предсказать, когда потребуются дополнительные секунды - или будут ли они положительными секундами прыжка или отрицательные високосные секунды)
Представление времени
Мне кажется, что и TAI, и POSIX представляют собой «количество секунд» (то есть что-то, что на самом деле легко для компьютера), тогда как UTC - это «человеческая интерпретация. времени (например, год / месяц / день, час: минута: секунда, миллисекунда), которое обычно не сохраняется внутри компьютера.
Перевод времени
Учитывая вышеизложенное, существует ряд проблем с переводом из POSIX (без подсчета дополнительных секунд) в TAI (с подсчетом дополнительных секунд):
- Требуется ведение таблицы / количества дополнительных секунд для перевода любого времени POSIX во время TAI.
- Даже если рассматривается пункт 1, спецификация POSIX, как указано выше, не дает никаких гарантий относительно того, что произойдет в течение секунды координации, поэтому в такие моменты у нас нет способа точно представить однозначное время.
- Если несколько систем должны обмениваться данными, передавая между ними временные метки, мы должны гарантировать, что таблица / количество дополнительных секунд поддерживаются согласованными.
С другой стороны, легко преобразовать POSIX в «человеческую интерпретацию» UTC. Для этого не требуется знание дополнительных секунд, поскольку предполагается, что каждый день имеет одинаковое количество секунд (хотя в действительности некоторые из этих «секунд» имеют разную продолжительность времени). На практике вы просто использовали бы формулу, обратную формуле в спецификации POSIX, чтобы получить различные компоненты времени в формате UTC (опять же, см. Спецификацию POSIX, на которую ссылается Мено Хохшильд).