MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak przekonwertować rok i tydzień roku uzyskany z zapytania MongoDB na datetime Joda?

ISO 8601

Joda-Time jest zgodny z ISO 8601 standard w definiowaniu tygodni .

  • Poniedziałek to pierwszy dzień tygodnia.
  • Tygodnie są ponumerowane od 1 do 52 lub 53.
  • Numery tygodni są pisane wielkimi literami W , na przykład W23 .
    Rok może być poprzedzony, 2015-W23 .
  • Tydzień 1, W01 , zawiera pierwszy czwartek roku.

O ile mi wiadomo, ta standardowa definicja jest coraz powszechniej stosowana w różnych krajach i branżach.

Niedzielne tygodnie

dokument MongoDB definiuje tygodnie jako:

O ile mi wiadomo, jest to w większości amerykańska definicja, rzadko używana poza Stanami Zjednoczonymi.

Dlaczego ta definicja mówi od 0 do 53? Oznacza to „do 54 tygodni”. Nie sądzę, aby ta definicja dawała 54 tygodnie w dowolnym roku, ale nie przemyślałam tego.

Dlaczego mieszać?

Nie można tak naprawdę mieszać tych dwóch definicji. Po co się męczyć? Jeśli Twoim celem jest użycie definicji tygodni MongoDB i przedstawienie ich według daty i godziny, napisz własny konwerter.

Moją własną radą byłoby porzucenie definicji i funkcji MongoDB i pozostanie przy standardowej definicji.

Znajdź niedzielę

Jeśli chcesz znaleźć niedzielę rozpoczynającą tydzień w świecie MongoDB, napisz swoją własną małą funkcję. Podaj numer roku i numer tygodnia i odzyskaj DateTime. W tym scenariuszu nie potrzebujesz funkcji tygodniowych Joda-Time.

Coś takiego.

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

Zrzuć do konsoli.

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

Po uruchomieniu.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongo:Jak grupować według $tydzień, ale zamiast tego zwracać datę rozpoczęcia i datę zakończenia każdego tygodnia?

  2. paginacja tablicy mongoDB

  3. szukaj w połączeniu dwa pola w Mongodb

  4. ActionDispatch::Routing::RouteSet#call Rails 4.1 bardzo wolno

  5. W jaki sposób w Meteor.js dwa projekty programistyczne mają używać tej samej instancji Mongo?