SimpleDateFormat Menghasilkan Tarikh dan Masa yang Salah Apabila Menghuraikan "YYYY-MM-dd HH:mm"
Apabila cuba menukar perwakilan Rentetan bagi tarikh dan masa dalam format "YYYY-MM-dd HH:mm" kepada objek Tarikh menggunakan SimpleDateFormat, keputusan yang salah mungkin diperolehi. Seperti yang digambarkan di bawah, kod menghasilkan output yang tidak dijangka:
<code class="java">Date newDate = null; String dateTime = "2013-03-18 08:30"; SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm", Locale.ENGLISH); df.setLenient(false); try { newDate = df.parse(dateTime); } catch (ParseException e) { throw new InvalidInputException("Invalid date input."); }</code>
Output yang dijangkakan hendaklah "Thu Mar 18 08:30:00 EST 2013", tetapi kod tersebut tersilap menghasilkan "Sun Dec 30 08:30 :00 EST 2012".
Punca isu ini terletak pada corak YYYY yang salah taip dalam pembina SimpleDateFormat. Corak yang betul untuk format tarikh dan masa yang ditentukan ialah yyyy, dengan huruf kecil y selama bertahun-tahun.
Untuk menyelesaikan isu ini, ubah suai corak SimpleDateFormat seperti berikut:
<code class="java">SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH);</code>
Dengan mengemas kini corak , objek SimpleDateFormat kini akan menghuraikan rentetan tarikh dan masa dengan betul, menghasilkan output yang diingini bagi "Thu Mar 18 08:30:00 EST 2013".
Adalah penting untuk ambil perhatian bahawa semasa Lenient dimatikan dalam hal ini kod, biasanya tidak disyorkan untuk mematikannya. Dalam kebanyakan kes, adalah lebih baik untuk mengendalikan ralat penghuraian dengan baik dan bukannya menghurai data yang salah.
Atas ialah kandungan terperinci Mengapakah SimpleDateFormat menghasilkan tarikh dan masa yang salah apabila menghuraikan \"YYYY-MM-dd HH:mm\"?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!