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 .