ISO 8601
Joda-Time følger ISO 8601 standard i definerende uger .
- Mandag er den første dag i ugen.
- Uger er nummereret 1 til 52 eller 53.
- Ugetal skrives med et stort
W
, såsomW23
.
År kan være indsat foran,2015-W23
. - Uge #1,
W01
, indeholder årets første torsdag.
Så vidt jeg ved, er denne standarddefinition blevet mere almindelig i brug i forskellige lande og industrier.
Søndagsuger
MongoDB-dokumentet definerer uger som:
Så vidt jeg ved, er dette en overvejende amerikansk definition, der ikke bruges meget uden for USA.
Hvorfor siger den definition 0 til 53? Det betyder "op til 54 uger". Jeg tror ikke, at denne definition ville give 54 uger på noget år, men jeg har ikke tænkt det igennem.
Hvorfor blande?
Du kan ikke rigtig blande de to definitioner. Hvorfor bekymre sig? Hvis dit mål er at bruge MongoDBs definition af uger og repræsentere dem ved en dato-tid, så skriv din egen konverter.
Mit eget råd ville være at droppe MongoDBs definition og funktion og holde fast i standarddefinitionen.
Find søndag
Hvis du vil finde søndagen, der starter en uge i MongoDBs verden, så skriv din egen lille funktion. Indtast årstal og ugenummer, og få en DateTime tilbage. I dette scenarie har du ikke brug for Joda-Times uge-i-året-funktioner.
Noget som dette.
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 );
Dump til konsol.
System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );
Når du kører.
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.