sql >> Databáze >  >> NoSQL >> MongoDB

Jak převést rok a týden roku získané z dotazu MongoDB na datum a čas Joda?

ISO 8601

Joda-Time se řídí ISO 8601 standardní v definujících týdnech .

  • Pondělí je první den v týdnu.
  • Týdny jsou očíslovány 1 až 52 nebo 53.
  • Čísla týdnů se píší s velkým W , například W23 .
    Rok může být uveden před, 2015-W23 .
  • Týden č. 1, W01 , obsahuje první čtvrtek roku.

Pokud vím, tato standardní definice se stále častěji používá v různých zemích a odvětvích.

Nedělní týdny

dokument MongoDB definuje týdny jako:

Pokud vím, jedná se převážně o americkou definici, která se mimo USA příliš nepoužívá.

Proč tato definice říká 0 až 53? To znamená „až 54 týdnů“. Nemyslím si, že by tato definice dala 54 týdnů v každém roce, ale nepromyslel jsem to.

Proč Mix?

Tyto dvě definice opravdu nemůžete míchat. Proč se obtěžovat? Pokud je vaším cílem použít definici týdnů MongoDB a reprezentovat je datem a časem, pak si napište svůj vlastní převodník.

Moje vlastní rada by byla zbavit se definice a funkce MongoDB a držet se standardní definice.

Najít neděli

Pokud chcete ve světě MongoDB najít neděli začínající týdnem, napište si vlastní malou funkci. Zadejte číslo roku a číslo týdne a získejte zpět datum a čas. V tomto scénáři nepotřebujete funkce Joda-Time pro týden v roce.

Něco takového.

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

Uložte do konzole.

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

Při spuštění.

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. Má Pymongo zabudovaná ověřovací pravidla?

  2. Jak zničit pracovní místa ve frontě resque pracovníky?

  3. Android/MongoDB:NoClassDefFoundError:com.mongodb.DBPortPool

  4. MongoDB - Dotaz na poslední prvek pole?