MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie konvertiere ich Jahr und Woche des Jahres, die ich von der MongoDB-Abfrage erhalten habe, in Joda Datetime?

ISO 8601

Joda-Time folgt dem ISO 8601 Standard in Wochen definieren .

  • Montag ist der erste Tag der Woche.
  • Die Wochen sind von 1 bis 52 oder 53 nummeriert.
  • Wochennummern werden mit einem großen W geschrieben , wie zum Beispiel W23 .
    Das Jahr kann vorangestellt werden, 2015-W23 .
  • Woche Nr. 1, W01 , enthält den ersten Donnerstag des Jahres.

Soweit ich weiß, wird diese Standarddefinition in verschiedenen Ländern und Branchen immer häufiger verwendet.

Sonntagswochen

Das MongoDB-Dokument definiert Wochen als:

Soweit ich weiß, ist dies eine hauptsächlich amerikanische Definition, die außerhalb der USA nicht viel verwendet wird.

Warum sagt diese Definition 0 bis 53? Das bedeutet „bis zu 54 Wochen“. Ich glaube nicht, dass diese Definition in irgendeinem Jahr 54 Wochen ergeben würde, aber ich habe es nicht durchdacht.

Warum mischen?

Sie können die beiden Definitionen nicht wirklich mischen. Warum die Mühe? Wenn Sie die MongoDB-Definition von Wochen verwenden und sie durch Datum und Uhrzeit darstellen möchten, schreiben Sie Ihren eigenen Konverter.

Mein persönlicher Rat wäre, die Definition und Funktion von MongoDB aufzugeben und bei der Standarddefinition zu bleiben.

Finde Sonntag

Wenn Sie in der MongoDB-Welt den Sonntag finden möchten, der eine Woche beginnt, schreiben Sie Ihre eigene kleine Funktion. Geben Sie die Jahreszahl und die Wochenzahl ein und erhalten Sie eine DateTime zurück. In diesem Szenario benötigen Sie die wöchentlichen Funktionen von Joda-Time nicht.

Etwas in der Art.

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

Auf Konsole ausgeben.

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

Beim Ausführen.

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.