Rumah > Java > javaTutorial > teks badan

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

Mary-Kate Olsen
Lepaskan: 2024-10-24 07:50:29
asal
959 orang telah melayarinya

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>
Salin selepas log masuk

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
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!