Java.время
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);
Выход:
день недели: ПОНЕДЕЛЬНИК
Вам следует избегать использования SimpleDateFormat
, Date
и Calendar
. Хотя я не знаю, что пошло не так в вашем коде, эти классы давно устарели и плохо спроектированы. Вместо этого я рекомендую java.time, современный API даты и времени Java. С ним намного приятнее работать.
Но могу ли я добавить к этому объект «дата»?
Иногда мы получаем старомодный объект 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.
person
Ole V.V.
schedule
29.06.2019
SimpleDateFormat
,Date
иCalendar
. Эти классы плохо спроектированы и давно устарели, первый из них, как известно, доставляет много хлопот. Вместо этого используйтеLocalDate
,DateTimeFormatter
иDayOfWeek
, все из java.time, современного API даты и времени Java. а>. - person Ole V.V.   schedule 29.06.201901/07/2019
(понедельник июля) и05/08/2019
(понедельник августа). В обоих случаях я получил 2, как и ожидалось. - person Ole V.V.   schedule 29.06.2019Calendar
,Date
иSimpleDateFormat
и начать использовать более новый Java Date and Time API, доступный в пакетеjava.time
. - person MC Emperor   schedule 29.06.2019