ТЛ; др
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
как они не настоящие часовые пояса, не стандартизирован, и даже не единственный (!).
Если вы хотите увидеть свой момент через призму часового пояса определенного региона, примените a, ZoneId
чтобы получить a 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 времени
ОБНОВЛЕНИЕ: проект 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. Но если вам нужно использовать дату, вы можете конвертировать из 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?
- Java SE 8 , Java SE 9 и более поздние
- Встроенный.
- Часть стандартного Java API со встроенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и Java SE 7
- Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport .
- Android
- Более поздние версии Android связывают реализации классов java.time.
- Для более ранних версий Android (<26) проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). Смотрите Как использовать ThreeTenABP… .
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как Interval
, YearWeek
, YearQuarter
, и более .