TL; др
LocalDate.parse(
"23-Jan-2017" ,
DateTimeFormatter.ofPattern("dd-MMM-uuuu" , Locale.US)
)
Использование java.time
Другие ответы являются правильными о форматировании шаблонов несовпадающих входных данных. Но и вопрос, и другие ответы устарели.
Современный способ состоит из классов java.time, которые вытесняют неприятные старые классы времени.
Класс LocalDate
представляет собой значение только для даты без времени суток и без часового пояса.
DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MMM-uuuu" , Locale.US);
LocalDate ld = LocalDate.parse("23-Jan-2017" , f);
ld.toString(): 2017-01-23
Укажите Locale
, как определяет человеческий язык, используемый, чтобы перевести название месяца. Если этот параметр опущен, то по умолчанию используется стандартное значение Locale
JVM. Это значение по умолчанию может быть изменено в любой момент любым кодом в любом потоке любого приложения в JVM, поэтому не полагайтесь на него.
О java.time
java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.
Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.
Где получить классы java.time?
- Java SE 8 и SE 9, а затем
- Встроенный.
- Часть стандартного Java API с объединенной реализацией.
- Java 9 добавляет некоторые незначительные функции и исправления.
- Java SE 6 и SE 7
- Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
- Android
Проект ThreeTen-Extra расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
, andfz more.
Формат, который вы используете, должен соответствовать формату синтаксического анализа String. –
[MCVE] (http://stackoverflow.com/help/mcve) от пользователя 1-rep? Я сказал да! +1 –
Смешно вы можете сделать это наоборот: строка может содержать дополнительные символы после даты, они просто игнорируются. Но строка не может быть меньше, чем требуется шаблону формата. –