ТЛ; др
OffsetDateTime.parse( "2011-10-06T12:00:00-08:00" )
.format(
DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( Locale.US ) // Or Locale.CANADA_FRENCH and such.
)
6 октября 2011 г.
java.time
В современном подходе используются классы java.time , которые вытесняют проблемные старые унаследованные классы даты и времени.
Введенная вами строка имеет формат, соответствующий стандарту ISO 8106 . Классы java.time по умолчанию используют эти стандартные форматы при разборе / генерации строк. Поэтому не нужно указывать шаблон форматирования.
Анализировать как OffsetDateTime
, потому что ваши входные строки содержат смещение от UTC, но не часовой пояс.
OffsetDateTime odt = OffsetDateTime.parse( "2011-10-06T12:00:00-08:00" ) ;
odt.toString (): 2011-10-06T12: 00-08: 00
Создать строку в нужном формате. Позвольте java.time автоматически локализовать, а не жестко кодировать шаблоны форматирования.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.MEDIUM ).withLocale( Locale.US ); // Or Locale.CANADA_FRENCH and such.
String output = odt.format( f );
выход: 6 октября 2011 г.
При выделении значения даты и времени в виде текста используйте стандартные форматы ISO 8601, а не локализованный формат.
String output = odt.toLocalDate().toString() ;
2011-10-06
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти несколько полезных классов, таких как Interval
, YearWeek
, YearQuarter
и more .