как преобразовать строку метки времени в java.util.Date - PullRequest
13 голосов
/ 23 февраля 2010

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

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

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

Ответы [ 3 ]

28 голосов
/ 23 февраля 2010

Вы можете сделать это так:

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

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

2 голосов
/ 05 февраля 2018

ТЛ; др

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?

  • 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 и more .

1 голос
/ 23 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...