ISO 8601
Joda-Time se řídí ISO 8601 standardní v definujících týdnech .
- Pondělí je první den v týdnu.
- Týdny jsou očíslovány 1 až 52 nebo 53.
- Čísla týdnů se píší s velkým
W
, napříkladW23
.
Rok může být uveden před,2015-W23
. - Týden č. 1,
W01
, obsahuje první čtvrtek roku.
Pokud vím, tato standardní definice se stále častěji používá v různých zemích a odvětvích.
Nedělní týdny
dokument MongoDB definuje týdny jako:
Pokud vím, jedná se převážně o americkou definici, která se mimo USA příliš nepoužívá.
Proč tato definice říká 0 až 53? To znamená „až 54 týdnů“. Nemyslím si, že by tato definice dala 54 týdnů v každém roce, ale nepromyslel jsem to.
Proč Mix?
Tyto dvě definice opravdu nemůžete míchat. Proč se obtěžovat? Pokud je vaším cílem použít definici týdnů MongoDB a reprezentovat je datem a časem, pak si napište svůj vlastní převodník.
Moje vlastní rada by byla zbavit se definice a funkce MongoDB a držet se standardní definice.
Najít neděli
Pokud chcete ve světě MongoDB najít neděli začínající týdnem, napište si vlastní malou funkci. Zadejte číslo roku a číslo týdne a získejte zpět datum a čas. V tomto scénáři nepotřebujete funkce Joda-Time pro týden v roce.
Něco takového.
int yearNumber = 2015;
int weekNumber = 0;
LocalDate firstWeekSunday = null;
LocalDate firstOfYear = new LocalDate ( yearNumber, 1, 1 );
if ( firstOfYear.getDayOfWeek ( ) == DateTimeConstants.SUNDAY ) {
firstWeekSunday = firstOfYear;
} else { // ELSE not Sunday.
firstWeekSunday = firstOfYear.minusDays ( firstOfYear.getDayOfWeek ( ) ); // Joda-Time uses standard ISO 8601 weeks, where Monday = 1, Sunday = 7.
}
LocalDate sunday = firstWeekSunday.plusWeeks ( weekNumber );
DateTimeZone zone = DateTimeZone.forID ( "America/Montreal" );
DateTime dateTime = sunday.toDateTimeAtStartOfDay ( zone );
Uložte do konzole.
System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );
Při spuštění.
Sunday-based week of year:2015 week: 0 starts: 2014-12-28.
Adjusted to time zone: America/Montreal is: 2014-12-28T00:00:00.000-05:00.