MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara mengubah tahun dan minggu dari tahun yang diperoleh dari kueri MongoDB menjadi Joda datetime?

ISO 8601

Joda-Time mengikuti ISO 8601 standar dalam menentukan minggu .

  • Senin adalah hari pertama dalam seminggu.
  • Minggu diberi nomor 1 sampai 52 atau 53.
  • Angka minggu ditulis dengan huruf besar W , seperti W23 .
    Tahun boleh didahului, 2015-W23 .
  • Minggu #1, W01 , berisi hari Kamis pertama tahun ini.

Sejauh yang saya tahu, definisi standar ini semakin umum digunakan di berbagai negara dan industri.

Minggu Minggu

dokumen MongoDB mendefinisikan minggu sebagai:

Sejauh yang saya tahu, ini adalah definisi sebagian besar Amerika, tidak banyak digunakan di luar AS.

Mengapa definisi itu mengatakan 0 hingga 53? Itu berarti "hingga 54 minggu". Saya tidak berpikir definisi ini akan menghasilkan 54 minggu dalam satu tahun, tetapi saya belum memikirkannya.

Mengapa Mencampur?

Anda tidak dapat benar-benar mencampur dua definisi. Kenapa mengganggu? Jika tujuan Anda adalah menggunakan definisi minggu MongoDB, dan mewakilinya dengan tanggal-waktu, maka tulis konverter Anda sendiri.

Saran saya sendiri adalah membuang definisi dan fungsi MongoDB, dan tetap menggunakan definisi standar.

Cari Minggu

Jika Anda ingin menemukan hari Minggu memulai minggu di dunia MongoDB, tulis fungsi kecil Anda sendiri. Beri makan di nomor tahun dan nomor minggu, dan dapatkan kembali DateTime. Dalam skenario ini, Anda tidak memerlukan fitur mingguan Joda-Time.

Sesuatu seperti ini.

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

Buang ke konsol.

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

Saat dijalankan.

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. Pembuatan Indeks MongoDB – Mencegah Pengguna Memicu Pembuatan Baru

  2. Mengapa MongoDB tidak menggunakan indeks gabungan untuk kueri?

  3. MEANJS :413 (Entitas Permintaan Terlalu Besar)

  4. MongoDB Cara terbaik untuk memasangkan dan menghapus entri database berurutan

  5. @CompoundIndex tidak berfungsi di Spring Data MongoDB