Формат даты Java - PullRequest
       25

Формат даты Java

1 голос
/ 26 мая 2011

У String str "23 мая 2011 12:20:00", хочу преобразовать его в дату, такую ​​как:

Date date = (new SimpleDateFormat("MMM dd yyyy HH:mm:ss")).parse(str);

Это всегда дает мне ParseException Формат непарсируемой даты: '23 мая 2011 12:20:00 '.

Искал похожие проблемы, вроде все в порядке.

Что не так?

Ответы [ 5 ]

6 голосов
/ 26 мая 2011

Возможно, вам потребуется дополнительно указать Locale , если языковой стандарт вашей виртуальной машины по умолчанию не является английским:

Date date = (new SimpleDateFormat("MMM dd yyyy HH:mm:ss", Locale.US)).parse(str);
2 голосов
/ 26 мая 2011
1 голос
/ 11 мая 2017

tl; dr

LocalDateTime.parse(
    "May 23 2011 12:20:00" , 
    DateTimeFormatter.ofPattern( "MMM d uuuu HH:mm:ss" , Locale.US )
)

Использование java.time

Принято Ответ Андреаса Крюгера правильный.Вы должны указать Locale, чтобы определить человеческий язык, используемый при переводе названия месяца.Лучше всего иметь привычку всегда указывать языковой стандарт в работе с датой и временем.

Современный подход позволяет избежать проблемных старых классов даты и времени, вместо этого используя их замены, классы java.time.

String input = "May 23 2011 12:20:00" ;

Определите шаблон форматирования, соответствующий вводу, используя класс DateTimeFormatter.

Locale определяет (а) человеческий язык для переводаназвание дня, название месяца и т. д. и (b) культурные нормы, решающие вопросы сокращения, использования заглавных букв, пунктуации, разделителей и т. д.

Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM d uuuu HH:mm:ss" , locale );

В ваших входных данных отсутствует указание часового поясаили смещение от UTC.Таким образом, мы анализируем как LocalDateTime.

LocalDateTime ldt = LocalDateTime.parse( input , f ) ;

ldt.toString (): 2011-05-23T12: 20: 00


О Java.time

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

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

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

Где получить классы java.time?

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

1 голос
/ 26 мая 2011

Попробуйте указать языковой стандарт при создании объекта SimpleDateFormat.

1 голос
/ 26 мая 2011

Вероятно, это проблема с инструментом, который вы используете. Взгляните на:

Почему я получаю ParseException при использовании SimpleDateFormat для форматирования даты и последующего ее анализа?

...