2013-05-30 12 views
8

Jak mówi tytuł, tworząc java.util.GregorianCalendar obiekt, powiedzmy, kalendarz, i działaKalendarz Java.DAY_OF_WEEK_IN_MONTH maksymalna wartość to 6. Czy to prawda?

calendar.getMaximum(Calendar.DAY_OF_WEEK_IN_MONTH) 

zwraca 6! Zgodnie z moją wiedzą, powinno to wynosić 5, ponieważ calendar.getMaximum(Calendar.DAY_OF_MONTH) wynosi 31 i 31/7 == 4 z resztą, tj. Istnieje maksymalnie 5 tygodni, a zatem dzień może wystąpić najwyżej 5 razy w miesiącu.

Czy tu czegoś brakuje?

Odpowiedz

2

W javadoc stanowi:

Na przykład, jeśli miesięcy 31 dni, DAY_OF_WEEK_IN_MONTH -1 pokrywają DAY_OF_WEEK_IN_MONTH 5 i na koniec 4.

dopuszcza to, że wartość maksymalna może być 5. Aby mieć powód dla wartości 6, musiałby być miesiąc z 36 dniami, co nie powinno się zdarzyć nawet z korektami daty/czasu. Przynajmniej nie znalazłem czegoś takiego sprawdzającego informacje o kalendarzu gregoriańskim.

Więc tak, maksymalna wartość powinna wynosić 5.


Edit: Ja również sprawdzone źródło implementacji referencyjnej i nie ma powodu, dla wartości 6.

+0

Czy masz na myśli to, że nic nie wskazuje na to, że wartość 6 wskazywałaby tydzień po DAY_OF_WEEK_IN_MONTH 5? (zgodnie z poczuciem javadocsa * DAY_OF_WEEK_IN_MONTH 0 oznacza tydzień przed DAY_OF_WEEK_IN_MONTH 1 *, który, moim zdaniem, i tak nie jest dobrze napisany) – user2435660

+0

@ user2435660 Mam na myśli to, że nic nie wskazuje na to, że to pole zostanie kiedykolwiek przypisane wartości większej niż 5. Jeśli na przykład wywołasz 'add (DAY_OF_WEEK_IN_MONTH, amount)', nie ma znaczenia, jaka jest maksymalna wartość - po prostu dodaje/odejmuje "kwotę * 7 dni". – Mifeet

1

Masz rację, to nie ma sensu. Aby DAY_OF_WEEK_IN_MONTH być 6, musiałby być miesiąc z 6 poniedziałkami (na przykład).

0

powód, dla którego jego 6 nie jest 5 ponieważ w angielskim kalendarzu, dzień rozpoczęcia na tydzień to niedziela. Jeśli na przykład pierwszy dzień miesiąca, powiedzmy, że 1 lipca to niedziela, to 2 lipca to już następny tydzień. Od lipca ma 31 dni, a skończysz 6 tygodni.

+0

Nie ma znaczenia, który dzień jest uważany za pierwszy dzień tygodnia. Dla konkretnej daty * DAY_OF_WEEK_IN_MONTH * pokazuje, czy jest to 1., 2., 3., wystąpienie ctra odpowiadającego dnia tygodnia, w bieżącym miesiącu. Tak więc maksymalna liczba powinna być maksymalną możliwą liczbą wystąpień * tego samego dnia tygodnia w ciągu miesiąca. Jeśli sprawdzisz kalendarz swojego systemu operacyjnego, zweryfikujesz, że nawet jeśli miesiąc * może * rozciągnąć się na 6 tygodni, nie możesz znaleźć * tego samego dnia *, w którym uczestniczysz, 6 tygodni – user2435660