sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur konverterar man år och vecka på året som erhållits från MongoDB-frågan till Joda datetime?

ISO 8601

Joda-Time följer ISO 8601 standard i definierande veckor .

  • Måndag är den första dagen i veckan.
  • Veckorna är numrerade 1 till 52 eller 53.
  • Veckans nummer skrivs med en versal W , till exempel W23 .
    År kan föregås, 2015-W23 .
  • Vecka #1, W01 , innehåller årets första torsdag.

Såvitt jag vet har denna standarddefinition blivit allt vanligare i olika länder och branscher.

Söndagveckor

MongoDB-dokumentet definierar veckor som:

Så vitt jag vet är detta en mestadels amerikansk definition, som inte används mycket utanför USA.

Varför säger den definitionen 0 till 53? Det betyder "upp till 54 veckor". Jag tror inte att den här definitionen skulle producera 54 veckor på något år, men jag har inte tänkt igenom det.

Varför mixa?

Du kan inte riktigt blanda de två definitionerna. Varför bry sig? Om ditt mål är att använda MongoDB:s definition av veckor och representera dem med en datum-tid, skriv sedan din egen omvandlare.

Mitt eget råd skulle vara att avstå från MongoDB:s definition och funktion och hålla fast vid standarddefinitionen.

Hitta söndag

Om du vill hitta söndagen som börjar en vecka i MongoDB:s värld, skriv din egen lilla funktion. Mata in årsnummer och veckonummer och få tillbaka en DateTime. I det här scenariot har du inget behov av Joda-Times veckovisa funktioner.

Något sånt här.

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 );

Dumpa till konsolen.

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ör.

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. Hur kan jag använda Python för att omvandla MongoDB:s bsondump till JSON?

  2. MongoDB samling avstavat namn

  3. Hur exponerar jag en ny REST-metod för genom ett Spring Data MongoDB-förråd med ALPS/HATEOAS-metadata?

  4. Mongoose schema array av objekt