หยุดตรวจสอบวันที่ด้วยคำสั่ง SimpleDateFormat.parse

ไม่รู้ทำไมเวลาที่ผมย้ายโปรเจค มักจะพบว่าโค้ดในการตรวจสอบวันที่ส่วนมาก (เรียกว่าทุกครั้งก็ได้) จะใช้วิธี parse แล้วดู exception หาไม่เกิดปัญหาให้ส่งค่ากลับเป็น true นอกนั้นให้ส่งค่าเป็น false หน้าตาดังนี้

public static boolean isValidDate(String source) {
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
	try {
		sdf.parse(source);
		return true;
	} catch (ParseException e) {
		return false;
	}
}

แต่สิ่งที่เกิดขึ้นเมื่อทำการตรวจสอบค่า 2008-02-2x กลับได้ผลลัพธ์ที่คาดไม่ถึง

invalid_date_string

นั่นคือไม่ถูกต้อง สิ่งที่ผมแนะนำให้คนรอบข้างคือหากไม่ห่วงเรื่องจำนวนวันในแต่ละเดือน หรือในกรณีที่เป็น Leap Year ให้ใช้ Regular Expression หากกังวลก็ให้ใช้ lib ตัวอื่นเช่น JodaTime หรือ Apache Commons Lang

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s