DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
System.out.println(LocalDate.parse("08/16/2011", dateFormatter));
Выход:
2011-08-16
Я помогаю современным ответом. Ответ Богемского правильный и был хорошим ответом, когда он был написан 6 лет назад. Теперь общеизвестно хлопотный класс SimpleDateFormat
давно устарел, и у нас намного лучше в java.time
, современном Java-API даты и времени. Я настоятельно рекомендую вам использовать это вместо старых классов даты и времени.
Что пошло не так в вашем коде?
Когда я анализирую 08/16/2011
, используя ваш фрагмент, я получаю Sun Jan 16 00:08:00 CET 2011
. Поскольку строчные буквы mm
означают минуты, я получаю 00:08:00
(8 минут после полуночи), а поскольку прописные буквы DD
обозначают день года, я получаю 16 января.
В java.time
слишком строковые шаблоны форматов чувствительны к регистру, и нам нужно было использовать прописные буквы MM
для месяца и строчные буквы d для дня месяца.
Вопрос: Могу ли я использовать java.time с моей версией Java?
Да, java.time
прекрасно работает на Java 6 и более поздних версиях, а также на старых и новых устройствах Android.
- В Java 8 и более поздних версиях и на новых устройствах Android (от 26 уровня API, как мне сказали) современный API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На более старых (Android) версиях Android используется ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки