Класс календаря Java предусматривает два поля: WEEK_OF_MONTH и DAY_OF_WEEK_IN_MONTH. Может кто-нибудь объяснить мне разницу? Кажется, что они оба возвращают одно и то же значение при тестировании с использованием приведенного ниже кода:
Calendar date = Calendar.getInstance(); date.set(2011,5,29); int weekNo1 = date.get(Calendar.WEEK_OF_MONTH); int weekNo2 = date.get(Calendar.DAY_OF_WEEK_IN_MONTH);
Calendar.WEEK_OF_MONTH
Calendar.DAY_OF_WEEK
Calendar.DAY_OF_WEEK_IN_MONTH
Итак, я пишу это 21 декабря 2016 года:
И вот что я получаю:
Calendar today = Calendar.getInstance(); System.out.println(today.get(Calendar.DAY_OF_WEEK)); //outputs 4, as today is 4th day in this week which started on 18 System.out.println(today.get(Calendar.DAY_OF_WEEK_IN_MONTH)); //outputs 3, as today is "3rd Wednesday of this month". Earlier two wednesday were on 7th and 14th System.out.println(today.get(Calendar.WEEK_OF_MONTH)); //outputs 4, as currently 4th week of a month is running
Разница в том, что DAY_OF_WEEK_IN_MONTH предоставляет количество раз, когда день недели происходил в течение месяца, а WEEK_OF_MONTH просто возвращает номер недели в текущем месяце.Подумайте об этом так: если месяц начинается в среду, первый понедельник наступит в течение второй недели месяца.Значение для DAY_OF_WEEK_IN_MONTH для этого понедельника будет равно 1, а WEEK_OF_MONTH будет равно 2.
Мне показалось, что все другие документы сбивают с толку, поэтому для всех разработчиков Microsoft, таких как я, этот вопрос может быть понятен вам, как и мне:* Константа, представляющая значение, сколько раз данный день произошел в месяце.
Неделя месяца - это неделя в текущем месяце, начиная с воскресенья, сколько недель было.
День недели месяца - это день, когда 5 будет четверг, 1 воскресенье и т. Д.