tl; др
Instant.ofEpochMilli( 170_798_400_000L )
1975-05-31T20: 00: 00Z
… и…
Instant.ofEpochMilli( 170_798_400_000L )
.atZone( ZoneId.of( "Europe/Moscow" ) )
1975-05-31T23: 00 + 03: 00 [Европа / Москва]
См. живой код .
Использование java.time
Современный подход использует классы java.time в Java 8 и более поздних версиях.
Вы используете проблемные старые классы даты и времени в Java, которые теперь унаследованы.Среди множества проблем в этих классах была благие намерения, но запутанная особенность метода Date::toString
, применяющего текущий часовой пояс по умолчанию при генерации строки.Внутреннее значение на самом деле всегда в UTC, но toString
создает иллюзию, что Date
имеет часовой пояс, а на самом деле его нет.Это объясняет вашу MSK
тайну.
[Еще более запутанно, что на самом деле - это часовой пояс, глубоко закопанный в Date
, но не имеющий отношения к этому обсуждению.Эти старые Date
/ Calendar
классы ужасны.К счастью, в Java теперь есть лучшая в своем классе структура даты и времени на любой платформе: java.time.]
Видимо, ваш ввод представляет количество миллисекунд с начала Unix 1970-01-01T00: 00:00Z.
Класс Instant
представляет момент на временной шкале в UTC с разрешением наносекунд (до девяти (9) цифр)десятичной дроби).Этот класс может непосредственно анализировать ваш входной номер.
Instant instant = Instant.ofEpochMilli( 170_798_400_000L ) ;
instant.toString (): 1975-05-31T20: 00: 00Z
Если вы хотите увидетьв тот же момент через линзу часового пояса определенного региона примените часовой пояс.Примените ZoneId
, чтобы получить ZonedDateTime
объект.
ZoneId z = ZoneId.of( "Europe/Moscow" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
1975-05-31T23: 00 + 03: 00 [Европа / Москва]
Неверная библиотека JavaScript
Результаты вашего вызова библиотеки JavaScript неверны с ее смещением +04: 00 . Согласно Википедии , московское время с 1930 по 1981 год было на три часа вперед, +03: 00.Среда java.time дает правильные результаты +03: 00 на протяжении 1975 года. Для получения дополнительной информации см. Время в России .Предостережение: я не эксперт в России / советское время.
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии.Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial .И поиск переполнения стека для многих примеров и объяснений.Спецификация: JSR 310 .
Где получить классы java.time?
Проект ThreeTen-Extra расширяет Java.время с дополнительными занятиями.Этот проект является полигоном для возможных будущих дополнений к java.time.Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .