Мне нужно преобразовать строку timestamp в java.util.Date
. Например:.
MMDDYYHHMMSS
до MM-DD-YY HH-MM-SS
Где MM
- месяц, DD
- дата, YY
- год, HH
- часы, MM
- минуты, а SS
- секунды.
Мне нужно преобразовать строку timestamp в java.util.Date
. Например:.
MMDDYYHHMMSS
до MM-DD-YY HH-MM-SS
Где MM
- месяц, DD
- дата, YY
- год, HH
- часы, MM
- минуты, а SS
- секунды.
Вы можете сделать это следующим образом:
DateFormat format = new SimpleDateFormat("MMddyyHHmmss");
Date date = format.parse("022310141505");
но я настоятельно рекомендую вместо этого использовать Joda Time. Это лучшая библиотека времени и времени длинным, длинным способом. В частности, форматирующие/парсеры в Joda Time являются потокобезопасными, поэтому вы можете использовать их свободно и статически; java.text.SimpleDateFormat
не является потокобезопасным, поэтому вам нужно либо создать один для каждого потока, либо сериализовать доступ к нему с помощью блока synchronized
.
используйте SimpleDateFormat с соответствующей строкой формата (будьте осторожны, чтобы использовать правильные буквы формата, прописные и строчные буквы имеют разные значения!).
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.
Определите шаблон форматирования, соответствующий вашей входной строке.
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, где это возможно. Они разработаны, чтобы быть практичными, легко разбираться машиной, легко читаемыми людьми в разных культурах.
В течение времени, такого как ваше время, T
в середине отделяет часть даты от части времени суток.
2018-01-23T12: 34: 56
Структура java.time встроена в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
и SimpleDateFormat
.
Проект Joda-Time, теперь режим обслуживания, советуем перейти к классам java.time.
Чтобы узнать больше, см. Учебник Oracle. И поиск Qaru для многих примеров и объяснений. Спецификация JSR 310.
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time с помощью дополнительных классов. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.