тл; д-р
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). Будь шанс вашої машини OS або PHP встановлена в Asia/Kabul
або Asia/Tehran
часових поясах? Я гадаю, що так, як ви повідомляєте IRST
у своїх результатах, це, мабуть, означає час Ірану. Наразі в 2017 році це єдині зони, що працюють з літнім часом, що на чотири з половиною години випередив UTC.
Вкажіть правильний час ім'я зони в форматі continent/region
, наприклад America/Montreal
, Africa/Casablanca
або Pacific/Auckland
. Ніколи не використовуйте 3-4 лист абревіатури , такі як EST
або IST
чи IRST
як вони НЕ справжні часові пояси, не стандартизований, і навіть не єдиний (!).
Якщо ви хочете побачити свій момент через об'єктив часового поясу певного регіону, застосуйте знак a, 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 .
FYI, конструктор Joda-Time DateTime схожий: Помножте на тисячу, щоб отримати long
(не an 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 . І шукайте переповнення стека за багатьма прикладами та поясненнями. Специфікація - JSR 310 .
Ви можете обмінюватися об'єктами java.time безпосередньо зі своєю базою даних. Використовуйте драйвер JDBC, сумісний з JDBC 4.2 або пізнішої версії. Немає потреби в струнах, немає потреби в java.sql.*
заняттях.
Де отримати класи java.time?
Проект ThreeTen-Extra розширює java.time додатковими класами. Цей проект є передумовою для можливих майбутніх доповнень до java.time. Ви можете знайти деякі корисні класи тут , такі як Interval
, YearWeek
, YearQuarter
, і більш .