Я пытаюсь разобрать строку даты, но ошибаюсь в месяце, почему?
new SimpleDateFormat("yyyy-MM-DD", Locale.US).parse("2018-03-08")
Почему это возвращает месяц как январь?
Пожалуйста, проверьте скриншот:
Я пытаюсь разобрать строку даты, но ошибаюсь в месяце, почему?
new SimpleDateFormat("yyyy-MM-DD", Locale.US).parse("2018-03-08")
Почему это возвращает месяц как январь?
Пожалуйста, проверьте скриншот:
dd, а не DD. Первый — день в месяце, второй — день в году. 08.03.2018 setLenient(false) на вашем SimpleDateFormat перед его использованием предотвратит некоторые попытки интерпретировать неправильный String. В вашем случае попытка проанализировать String даст java.text.ParseException: Unparseable date: "2018-03-08" . 08.03.2018 SimpleDateFormat и друзей и добавить ThreeTenABP на свой Android. проект, чтобы использовать java.time, современный API даты и времени Java. С ним намного приятнее работать. Это также облегчит вашу проблему: современный класс LocalDate анализирует ваш 2018-03-08 без какого-либо явного средства форматирования, поскольку он имеет формат по умолчанию (ISO 8601). Таким образом, нет способа получить неправильную строку шаблона формата. 08.03.2018 Это связано с форматом, который вы использовали как "yyyy-MM-DD". Парсер будет анализировать последовательно:
"2018-03-08"yyyy - приблизит к 2018 годуMM - принесет в месяц МАРТНо что такое DD? Это количество дней с начала года. Итак, здесь он вернулся к 8th дню этого года (2018), что означает 8th января.
Вот почему вы видите январь вместо марта.
Почему бы не использовать java.timeAPI?
LocalDate localDate = LocalDate.parse("2018-03-08");
Если вы хотите преобразовать LocalDate в java.util.Date, вы можете выполнить этот ответ.
Если вы пытаясь отобразить название месяца, вы должны использовать 3 M, и это не стандарт для дня, чтобы быть d, а не D
Я бы посоветовал попробовать yyyy-MMM-dd
Я попробовал это ниже, и он отлично работает, изменив DD на dd
try {
Date date= new SimpleDateFormat("yyyy-MM-dd",Locale.US).parse("2018-03-08");
Calendar calendar= Calendar.getInstance();
calendar.setTime(date);
Log.d("MONTH ","" + calendar.get(Calendar.MONTH));
} catch (ParseException e) {
e.printStackTrace();
}
Вам нужно использовать dd вместо DD
Попробуй это :-
new SimpleDateFormat("yyyy-MM-dd", Locale.US).parse("2018-03-08");