MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да конвертирате годината и седмицата от годината, получени от заявката на MongoDB, в Joda datetime?

ISO 8601

Joda-Time следва ISO 8601 стандарт при дефиниране на седмици .

  • Понеделник е първият ден от седмицата.
  • Седмиците са номерирани от 1 до 52 или 53.
  • Номерата на седмиците се изписват с главна буква W , като W23 .
    Може да се добави година, 2015-W23 .
  • Седмица № 1, W01 , съдържа първия четвъртък за годината.

Доколкото ми е известно, тази стандартна дефиниция се използва все по-често в различни страни и отрасли.

Неделни седмици

документ на MongoDB дефинира седмици като:

Доколкото знам, това е предимно американско определение, което не се използва много извън САЩ.

Защо тази дефиниция казва от 0 до 53? Това означава "до 54 седмици". Не мисля, че това определение ще доведе до 54 седмици в която и да е година, но не съм го обмислял.

Защо да смесваме?

Не можете наистина да смесвате двете определения. Защо да се занимавам? Ако целта ви е да използвате дефиницията на MongoDB за седмици и да ги представите чрез дата-час, тогава напишете свой собствен конвертор.

Моят собствен съвет би бил да се откажете от дефиницията и функцията на MongoDB и да се придържате към стандартната дефиниция.

Намерете неделя

Ако искате да намерите неделята, която започва седмица в света на MongoDB, напишете своя собствена малка функция. Въведете номера на годината и номера на седмицата и върнете DateTime. При този сценарий нямате нужда от функциите за седмицата на годината на Joda-Time.

Нещо подобно.

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

Изхвърляне към конзолата.

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

При изпълнение.

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. Възел вмъква големи данни с помощта на mongoose

  2. MongoDB $pow

  3. MomentJS не преобразува датата правилно

  4. Какъв е правилният начин за индексиране в MongoDB, когато съществува голяма комбинация от полета

  5. свързване към база данни atlas mongo