ТЛ; др
ZonedDateTime.parse (
"20110913T100702.631 GMT" ,
DateTimeFormatter.ofPattern( "uuuuMMdd'T'HH:mm:ss.SSS z" )
).format(
DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL , FormatStyle.SHORT )
.withLocale( Locale.US )
)
Вторник, 13 сентября 2011 г., 10:07
ISO 8601
Ваша строка ввода почти соответствует формату, определенному как «базовая» версия стандартного формата ISO 8601 . Слово basic означает минимизацию использования разделителей, в противном случае используется более распространенная «расширенная» версия формата ISO 8601.
String input = "20110913T100702.631 GMT" ;
Использование java.time
В других Ответах используются старые классные классы даты и времени, которые теперь заменяются классами java.time.
Классы java.time по умолчанию используют многие стандартные форматы ISO 8601 при разборе / генерации строк. Поэтому часто нет необходимости указывать шаблон форматирования. Но этот конкретный формат basic не поддерживается по умолчанию, поэтому мы должны указать шаблон форматирования.
DateTimeFormatter fInput = DateTimeFormatter.ofPattern ( "uuuuMMdd'T'HHmmss.SSS z" );
Разобрать как ZonedDateTime
.
ZonedDateTime zdt = ZonedDateTime.parse ( input, fInput );
Чтобы сгенерировать строку, представляющую значение объекта ZonedDateTime
в нужном формате, вы можете определить заданный шаблон форматирования. Но я предлагаю вам вместо этого позволить java.time автоматически локализоваться для вас.
Для локализации укажите:
FormatStyle
для определения длины или сокращения строки.
Locale
для определения (а) человеческого языка для перевода названия дня, названия месяца и т. Д., И (б) культурных норм, решающих вопросы сокращения, капитализации, пунктуации, разделители и тому подобное.
Итак ...
// Generate output string
Locale locale = Locale.US; // Or Locale.CANADA_FRENCH, Locale.ITALY, etc.
DateTimeFormatter fOutput =
DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL, FormatStyle.SHORT ) // Specify format style of date portion, then time-of-day portion.
.withLocale ( locale );
String output = zdt.format ( fOutput );
Дамп на консоль.
// Dump to console
System.out.println ( "input: " + input );
System.out.println ( "zdt.toString(): " + zdt );
System.out.println ( "output: " + output );
См. , этот код запускается на IdeOne.com .
ввод: 20110913T100702.631 GMT
zdt.toString (): 2011-09-13T10: 07: 02.631Z [GMT]
выходной: вторник, 13 сентября 2011 г., 10:07
О 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 .