java.time
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/u");
String fechaaux = "01/07/2019";
LocalDate date = LocalDate.parse(fechaaux, formatter);
DayOfWeek dayOfWeek = date.getDayOfWeek();
System.out.println("dayOfWeek: " + dayOfWeek);
Вывод:
dayOfWeek: MONDAY
Вам следует избегать использования SimpleDateFormat
, Date
и Calendar
.Хотя я не знаю, что пошло не так в вашем коде, эти классы давно устарели и плохо разработаны.Вместо этого я рекомендую java.time, современный Java API даты и времени.С ним гораздо приятнее работать.
Но можно ли добавить к этому объект "дата"?
Иногда мы получаем старомодный Date
объект из API, который мы не хотим обновлять прямо сейчас.В этом случае возможное преобразование:
ZonedDateTime zdt
= oldfashionedDate.toInstant().atZone(ZoneId.systemDefault());
DayOfWeek dayOfWeek = zdt.getDayOfWeek();
Редактировать:
Гораздо лучше использовать Java Date
до того, как Java Calendar
?Результат одинаковый?
Вам следует избегать обоих.Только если вы получаете один из них от унаследованного API, который вы не можете изменить, примите то, что вы получите, и сначала преобразуйте его в современный тип.Если вы получите Date
, используйте приведенное выше преобразование.Если вы получите Calendar
, вы можете быть уверены, что это GregorianCalendar
.Если это так:
ZonedDateTime zdt = ((GregorianCalendar) theCalendarYouGot).toZonedDateTime();
Теперь действуйте, как описано выше.
Исторически Calendar
и GregorianCalendar
были представлены как (несколько неудачная) попытка компенсировать проблемы проектирования с Date
.
Ссылка: Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.