Rumah  >  Artikel  >  Java  >  Mengapa Java SimpleDateFormat Menukar Tarikh AD kepada Januari (yyyy/MM/DD vs yyyy/MM/dd)?

Mengapa Java SimpleDateFormat Menukar Tarikh AD kepada Januari (yyyy/MM/DD vs yyyy/MM/dd)?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-24 07:50:29949semak imbas

Why Does Java SimpleDateFormat Convert AD Dates to January (yyyy/MM/DD vs yyyy/MM/dd)?

Java SimpleDateFormat Conundrum: Semua Bulan Lalai hingga Januari

Apabila menghuraikan tarikh daripada Active Directory menggunakan SimpleDateFormat Java, isu yang membingungkan timbul: setiap satu tarikh tersalah tukar kepada Januari. Tertarik dengan percanggahan ini, mari kita mendalami coretan kod yang menunjukkan masalah:

<code class="java">private Date getParsedDate(String givenString) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD");
    try {
        return sdf.parse(formattedString);
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return null;
}</code>

selepas melaksanakan kod ini dengan nilai tarikh AD "20050912190509.0Z", kami memperoleh output yang tidak dijangka:

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Jan 12 00:00:00 EST 2005

Walaupun hari dan tahun dikenal pasti dengan tepat, bulan itu secara berterusan disalah anggap sebagai Januari. Apakah rahsia yang terdapat dalam kod yang kelihatan mudah ini yang membawa kepada ralat yang ketara ini?

Jawapannya terletak pada kesilapan halus dalam rentetan corak SimpleDateFormat. Dengan menyatakan "yyyy/MM/DD", kami secara tidak sengaja memaksa format bulan dalam huruf besar "MM". Walau bagaimanapun, nilai tarikh Active Directory menggunakan huruf kecil "mm" selama berbulan-bulan.

Untuk membetulkan isu ini, kami hanya melaraskan rentetan corak kepada "yyyy/MM/dd" dengan huruf kecil "dd" untuk hari:

<code class="java">SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");</code>

Dengan membuat pengubahsuaian kecil ini, SimpleDateFormat mentafsir dengan betul tarikh daripada Active Directory, menjadikan rentetan tarikh akhir dengan bulan yang betul:

Value from AD is: 20050912190509.0Z
Formatted String is: 2005/09/12
Final date string is: Wed Sep 12 00:00:00 EST 2005

Pembetulan ini memastikan SimpleDateFormat Java menghuraikan dengan tepat tarikh daripada Active Directory, membolehkan anda menggunakan data sejarah dengan yakin atau membuat laporan berdasarkan julat tarikh tertentu.

Atas ialah kandungan terperinci Mengapa Java SimpleDateFormat Menukar Tarikh AD kepada Januari (yyyy/MM/DD vs yyyy/MM/dd)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn