Как преобразовать строку timestamp в java.util.Date

Мне нужно преобразовать строку timestamp в java.util.Date. Например:.

MMDDYYHHMMSS до MM-DD-YY HH-MM-SS

Где MM - месяц, DD - дата, YY - год, HH - часы, MM - минуты, а SS - секунды.

Ответ 1

Вы можете сделать это следующим образом:

DateFormat format = new SimpleDateFormat("MMddyyHHmmss");
Date date = format.parse("022310141505");

но я настоятельно рекомендую вместо этого использовать Joda Time. Это лучшая библиотека времени и времени длинным, длинным способом. В частности, форматирующие/парсеры в Joda Time являются потокобезопасными, поэтому вы можете использовать их свободно и статически; java.text.SimpleDateFormat не является потокобезопасным, поэтому вам нужно либо создать один для каждого потока, либо сериализовать доступ к нему с помощью блока synchronized.

Ответ 2

используйте SimpleDateFormat с соответствующей строкой формата (будьте осторожны, чтобы использовать правильные буквы формата, прописные и строчные буквы имеют разные значения!).

Ответ 3

TL;DR

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-й век (20xx).

Разбирайте как 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 в середине отделяет часть даты от части времени суток.

2018-01-23T12: 34: 56


О java.time

Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar и SimpleDateFormat.

Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.

Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.

Где получить классы 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 проект ThreeTenABP адаптирует ThreeTen-Backport (упомянутый выше). См. Как использовать ThreeTenABP....

Проект ThreeTen-Extra расширяет java.time с помощью дополнительных классов. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и больше.