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

Bagaimana cara memasukkan tanggal yang sama di mongodb seperti yang dibaca dari String melalui Java?

Ada dua masalah dengan apa yang Anda coba lakukan saat ini:

  1. Anda memiliki kesalahan ketik pada baris kedua kode yang berarti bulan Anda diuraikan sebagai menit
  2. Seperti yang disebutkan, Anda tidak memperhitungkan zona waktu.

Untuk mengatasi masalah pertama, Anda perlu mengubah

Date d2 = new SimpleDateFormat("dd/mm/yyyy").parse(arr[10]);

ke

Date d2 = new SimpleDateFormat("dd/MM/yyyy").parse(arr[10]);

Format tanggal peka huruf besar/kecil, yang coba Anda lakukan adalah mengurai bulan sebagai **m**inute alih-alih **M**bulan. Dalam tes yang saya jalankan, itu berarti semua bulan keluar sebagai Januari, yang saya lihat juga terjadi dalam contoh Anda. Juga, saya perhatikan bahwa baris kode pertama Anda, pemformat (yang diatur dengan benar) tidak digunakan.

Masalah kedua adalah ya, Java Date s tidak berperilaku seperti yang Anda harapkan. Mereka HARUS memiliki komponen waktu, meskipun Anda tidak mempedulikannya hanya dengan tanggal. Selain itu, mereka harus memiliki zona waktu karena mereka punya waktu.

Anda mungkin tidak memiliki pilihan untuk pindah ke perpustakaan Joda superior, dalam hal ini ada cara untuk mengatasi hal ini. Saya telah menulis tes yang seharusnya menunjukkan ini:

@Test
public void shouldParseDateCorrectly() throws Exception {
    // Given
    SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
    format.setTimeZone(TimeZone.getTimeZone("UTC"));

    // When
    Date parsedDate = format.parse("21/08/2012");

    // Then
    Assert.assertThat(parsedDate.toString(), is("Tue Aug 21 02:00:00 CEST 2012"));
    Assert.assertThat(parsedDate.toGMTString(), is("21 Aug 2012 00:00:00 GMT"));
}

Jadi Anda dapat melihat bahwa saya telah menggunakan format yang benar, tetapi juga mengatur zona waktunya ke UTC (sehingga memiliki offset nol dan tidak ada penghematan siang hari). Kemudian ketika Anda mengurai tanggal dengan formatter ini, tanggal akan keluar dengan waktu tengah malam di zona waktu UTC. Karena komputer saya di Eropa, ketika saya mencetak tanggal ini menunjukkan waktu 2 pagi, karena zona waktu ini 2 jam lebih cepat dari UTC. Tetapi ketika saya menggunakan toGMTString yang sudah tidak digunakan lagi metode, waktunya keluar sebagai nol.

Saat Anda menyimpan tanggal ini ke MongoDB menggunakan driver Java, tanggal, waktu, dan zona waktu akan tersimpan dengannya, meskipun yang Anda pedulikan hanyalah tanggal. Yang perlu Anda lakukan saat membaca tanggal kembali adalah mengingat tanggal tersebut dalam UTC dan menyetel zona waktu dengan tepat.

Atau, Anda dapat menyimpannya di MongoDB tanpa mengubah zona waktu, asalkan Anda selalu membacanya dan menulisnya di zona waktu yang sama. Tapi ini penuh dengan bug tak terduga ketika a) berurusan dengan waktu di atas tengah malam dan b) waktu musim panas dimulai (atau berhenti).

Atau cukup gunakan Joda-Time .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. kueri sql ke mongodb?

  2. spring mvc rest respon json dan xml

  3. Agregat Grup berdasarkan Tanggal dengan Offset Musim Panas

  4. Iterasi melalui array string, diambil dari MongoDB

  5. Mengapa luwak selalu menambahkan s di akhir nama koleksi saya?