sql >> Database >  >> NoSQL >> MongoDB

Hoe jaar en week van het jaar verkregen uit MongoDB-query omzetten in Joda datetime?

ISO 8601

Joda-Time volgt de ISO 8601 standaard in definiërende weken .

  • Maandag is de eerste dag van de week.
  • Weken zijn genummerd van 1 tot 52 of 53.
  • Weeknummers worden geschreven met een hoofdletter W , zoals W23 .
    Jaar mag worden toegevoegd, 2015-W23 .
  • Week # 1, W01 , bevat de eerste donderdag van het jaar.

Voor zover ik weet, wordt deze standaarddefinitie steeds vaker gebruikt in verschillende landen en industrieën.

Zondagweken

Het MongoDB-document definieert weken als:

Voor zover ik weet, is dit een overwegend Amerikaanse definitie, die buiten de VS niet veel wordt gebruikt.

Waarom zegt die definitie 0 tot 53? Dat betekent "tot 54 weken". Ik denk niet dat deze definitie in enig jaar 54 weken zou opleveren, maar ik heb er niet over nagedacht.

Waarom mixen?

Je kunt de twee definities niet echt door elkaar halen. Waarom zou je je drukmaken? Als het je doel is om MongoDB's definitie van weken te gebruiken en ze door een datum-tijd weer te geven, schrijf dan je eigen converter.

Mijn eigen advies zou zijn om de definitie en functie van MongoDB te schrappen en bij de standaarddefinitie te blijven.

Zoek zondag

Als je de zondag wilt vinden die een week begint in de wereld van MongoDB, schrijf dan je eigen kleine functie. Voer het jaarnummer en weeknummer in en krijg een DateTime terug. In dit scenario heb je de week-van-jaar-functies van Joda-Time niet nodig.

Zoiets.

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 naar console.

System.out.println ( "Sunday-based week of year:" + yearNumber + " week: " + weekNumber + " starts: " + sunday + "." );
System.out.println ( "Adjusted to time zone: " + zone + " is: " + dateTime + "." );

Wanneer uitgevoerd.

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. Bulkinsertprestaties in MongoDB voor grote collecties

  2. Heatmaps genereren met R, Php en Mongodb

  3. sorteren op ingesloten objectwaarde in Mongodb

  4. Mongodb-fout bij het starten