ТЛ; др
java.time.LocalDateTime.parse(
"012318123456" ,
DateTimeFormatter.ofPattern( "MMdduuHHmmss" )
).format(
DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" )
)
01-23-18 12-34-56
java.time
Современный подход использует классы java.time .
Определите шаблон форматирования, соответствующий вашей входной строке.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMdduuHHmmss" ) ;
Ваш двузначный год будет интерпретироваться как 21-й век (20хх).
Анализировать как LocalDateTime
, поскольку во входной строке отсутствует индикатор часового пояса или смещения от UTC.
LocalDateTime ldt = LocalDateTime.parse( "012318123456" , f ) ;
ldt.toString (): 2018-01-23T12: 34: 56
Создайте строку в нужном формате.
DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" ) ;
String output = ldt.format( fOut );
01-23-18 12-34-56
ISO 8601
Оба ваших формата ужасны по нескольким причинам.
При сериализации значений даты и времени всегда используйте стандартные форматы ISO 8601 . Они разработаны так, чтобы быть практичными, легко разбираемыми на машине, легко читаемыми людьми в разных культурах.
Для такой даты-времени, как ваша, T
в середине отделяет часть даты от части времени-дня.
* * +1045 2018-01-23T12: 34: 56
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .
Чтобы узнать больше, см. Учебное пособие по Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где взять классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .