ТЛ; др
Instant.ofEpochSecond( 1_280_512_800L )
2010-07-30T18: 00: 00Z
java.time
Новая платформа java.time, встроенная в Java 8 и более поздние версии, является преемницей Joda-Time.
Эти новые классы включают удобный фабричный метод для преобразования количества целых секунд из эпохи. Вы получаете Instant
, момент времени на UTC с разрешением до наносекунд.
Instant instant = Instant.ofEpochSecond( 1_280_512_800L );
instant.toString (): 2010-07-30T18: 00: 00Z
Обратите внимание, что код запускается на IdeOne.com .
Asia/Kabul
или Asia/Tehran
часовые пояса?
Вы сообщили о получении значения времени дня 22:30 вместо 18:00, показанного здесь. Я подозреваю, что ваша утилита PHP неявно применяет часовой пояс по умолчанию для настройки из UTC. Мое значение здесь - UTC, обозначенное Z
(сокращение от Zulu
, означает UTC). Есть ли вероятность, что на вашей машине ОС или PHP установлены часовые пояса Asia/Kabul
или Asia/Tehran
? Полагаю, что так как вы сообщаете в своем выводе IRST
, что, очевидно, означает иранское время. В настоящее время в 2017 году это единственные зоны , работающие с летним временем, которое на четыре с половиной часа опережает UTC.
Укажите собственное имя часового пояса в формате continent/region
, например America/Montreal
, Africa/Casablanca
или Pacific/Auckland
. Никогда не используйте 3-4-буквенное сокращение, например EST
или IST
или IRST
, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).
Если вы хотите, чтобы видел ваш момент через объектив часового пояса определенного региона, примените ZoneId
, чтобы получить ZonedDateTime
. Все тот же одновременный момент, но рассматривается как другое время настенных часов .
ZoneId z = ZoneId.of( "Asia/Tehran" ) ;
ZonedDateTime zdt = instant.atZone( z ); // Same moment, same point on timeline, but seen as different wall-clock time.
2010-07-30T22: 30 + 04: 30 [Азия / Тегеран]
Преобразование из java.time в унаследованные классы
Вы должны придерживаться новых классов java.time. Но вы можете конвертировать в старый, если требуется.
java.util.Date date = java.util.Date.from( instant );
Joda-Time
ОБНОВЛЕНИЕ: Проект Joda-Time теперь находится в режиме обслуживания , и команда рекомендует перейти на классы java.time .
К вашему сведению, конструктор для Joda-Time DateTime аналогичен: умножьте на тысячу, чтобы получить long
(не int
!).
DateTime dateTime = new DateTime( ( 1_280_512_800L * 1000_L ), DateTimeZone.forID( "Europe/Paris" ) );
Лучше всего избегать печально известных классов java.util.Date и .Calendar. Но если вам нужно использовать Date, вы можете конвертировать из Joda-Time.
java.util.Date date = dateTime.toDate();
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .