ТЛ; др
Используйте 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 времени
ОБНОВЛЕНИЕ: проект 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 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
, и более .