тл; д-р
Використовуйте java.time.Instant
клас для розбору тексту у стандартному форматі ISO 8601, що відображає момент у UTC.
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
Цей формат визначається стандартом ISO 8601 для форматів рядків дати-часу.
Обидва:
… Використовувати формати ISO 8601 за замовчуванням для розбору та генерації рядків.
Як правило, слід уникати використання старих класів java.util.Date /.Calendar & java.text.SimpleDateFormat, оскільки вони, як відомо, є клопітливими, заплутаними та хибними. Якщо потрібно для взаємодії, ви можете перетворитись сюди.
java.time
Вбудований в Java 8 і пізніших версій є новою основою java.time . Натхненний Joda-Time , визначений JSR 310 , і розширений проектом ThreeTen-Extra .
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
Перетворити на старий клас.
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
Часовий пояс
Якщо потрібно, ви можете призначити часовий пояс.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Define a time zone rather than rely implicitly on JVM’s current default time zone.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); // Assign a time zone adjustment from UTC.
Перетворити.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda-Time
ОНОВЛЕННЯ: Проект Joda-Time зараз знаходиться в режимі обслуговування. Команда радить міграцію до класів java.time .
Ось приклад коду в Joda-Time 2.8.
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC ); // Specifying a time zone to apply, rather than implicitly assigning the JVM’s current default.
Перетворити на старий клас. Зауважте, що призначений часовий пояс втрачається при перетворенні, оскільки juDate не може бути призначений часовому поясу.
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
Часовий пояс
Якщо потрібно, ви можете призначити часовий пояс.
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
Про 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
, і більш .