ТЛ; др
ZonedDateTime.format(
input ,
DateTimeFormatter.ofPattern(
"EEE MMM dd HH:mm:ss zzz uuuu" ,
Locale.ENGLISH
)
)
java.time
Ужасные классы Date
и DateFormat
были вытеснены несколько лет назад современными java.time классами с принятием JSR 310 .
Конструктор , на который вы ссылаетесь , фактически вызывает статический метод Date.parse
. Как объясняется в этой документации, этот метод принимает различные форматы. В java.time есть одна точка для такого же поведения. Однако я сомневаюсь, что ваше приложение сталкивается со всеми этими синтаксисами различных форматов одновременно.
Я предлагаю вам взглянуть на конкретные форматы, используемые вашими фактическими данными. Затем создайте коллекцию из DateTimeFormatter
объектов, чтобы соответствовать. Обратите внимание, что в отличие от устаревших классов, java.time классы полностью поточно-безопасные . Таким образом, вы можете хранить один набор форматеров для многократного использования в приложении и в потоках.
Для шаблона форматирования, показанного в принятом ответе, здесь эквивалентен java.time с использованием класса DateTimeFormatter
. Обратите внимание, что вы должны явно указать желаемую / ожидаемую локаль, а не полагаться неявно на текущую локаль по умолчанию JVM.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss zzz uuuu" , Locale.ENGLISH ) ;
ZonedDateTime zdt = ZonedDateTime.format( input , f ) ;
По возможности избегайте использования устаревших классов даты и времени, таких как java.util.Date
. Но если вам необходимо иметь Date
для взаимодействия со старым кодом, который еще не обновлен до java.time , вы можете выполнить конвертацию. Посмотрите на новые методы преобразования, добавленные к старым классам.
Псевдоним java.util.Date
представляет момент в UTC. Его современный эквивалент
это java.time.Instant
класс. Мы можем извлечь Instant
из нашего ZonedDateTime
. Затем преобразовать в Date
.
Instant instant = zdt.toInstant() ; // Adjust from time zone to UTC.
java.util.Date d = Date.from( instant ) ; // Convert from modern class `Instant` to legacy class `Date`.
В другом направлении.
Instant instant = d.toInstant() ; // Convert from legacy class `Date` to modern class `Instant`.
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ; // Adjust from UTC to the wall-clock time used by the people of a particular region (a time zone).
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Учебное пособие по Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на классы java.time .
Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .