Я пытаюсь разобрать строку даты, но ошибаюсь в месяце, почему?
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.time
API?
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");