sql >> Database teknologi >  >> NoSQL >> MongoDB

Hvordan konverteres år og uge i året opnået fra MongoDB-forespørgsel til Joda datetime?

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åsom W23 .
    Å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.



  1. Sådan massesletter du hundredtusindvis af nøgler med specialtegn i Redis

  2. hvor man kan indsætte funktioner i codeigniter mongodb

  3. mongo createIndex baggrund blokerer skallen

  4. Fjern et element fra et array mongodb tilsvarende i mongoose