[java]ปัญหาการ การใช้ DateFormat และ setLenient

เนื่องจากต้องการตรวจสอบว่าข้อมูลที่รับมาเป็นข้อมูลวันที่ตามรูปแบบที่กำหนดหรือไม่ เลยจัดแจงเขียน code ดังนี้ เพื่อทำการตรวจสอบ

public static void main(String[] args){
	DateFormat  fmt = new SimpleDateFormat("yyyy/MM/dd", Locale.US);
	try {
		System.out.print(fmt.parse("2011/06/50"));
	} catch (ParseException ex) {
		ex.printStackTrace();
	}
}

ทดลองรันดู โอ้พระเจ้า วันที่ “2011/06/50” กลับถูกต้องไม่ผิดอะไร แสดงผลดังนี้

Wed Jul 20 00:00:00 ICT 2011

ผิดเต็มๆ เลยหาว่าสาเหตุมันคืออะไร จนสุดถ้ายไปพบกับ setLenient
เลยได้รู้ว่าปกติแล้ว จะไม่เข้มงวดในการ parse วันที่ถ้าต้องการให้ตรวจสอบและเข้มงวดต้องกำหนด lenient ดังนี้

	DateFormat  fmt = new SimpleDateFormat("yyyy/MM/dd", Locale.US);
	try {
		fmt.setLenient(false);
		System.out.print(fmt.parse("2011/06/50"));
	} catch (ParseException ex) {
		ex.printStackTrace();
	}

ทดลองรันใหม่ จะได้ผลดังนี้

java.text.ParseException: Unparseable date: "2011/06/50"
        at java.text.DateFormat.parse(DateFormat.java:337)
        at wsews.test.TestEWSWebService.xx(TestEWSWebService.java:57)
        at wsews.test.TestEWSWebService.main(TestEWSWebService.java:25)

แหล่งข้อมูล
setLenient

  1. No comments yet.

  1. No trackbacks yet.