คลาส java.text.SimpleDateFormat ใช้จัดรูปแบบและแปลงสตริง↔วันที่
ขั้นตอนการ Parse วันที่
- สร้าง SimpleDateFormat ด้วยรูปแบบที่ต้องการ
- ใช้เมธอด parse() แปลงสตริงเป็น Date
ตาราง Format Codes (Pattern Letters) ครบถ้วน
| Letter | Component | Example |
|---|---|---|
| G | Era designator (ยุค) | AD, BC |
| y | Year (ปี) | 2005, 96 |
| Y | Week year (ปีของสัปดาห์) | 2005, 96 |
| M | Month in year (เดือนในปี) | September, Sep, 09 |
| L | Month in year (standalone) | September, Sep, 09 |
| w | Week in year (สัปดาห์ในปี) | 23 |
| W | Week in month (สัปดาห์ในเดือน) | 3 |
| D | Day in year (วันในปี) | 129 |
| d | Day in month (วันในเดือน) | 27 |
| F | Day of week in month (วันของสัปดาห์ในเดือน) | 5 |
| E | Day in week name (ชื่อวัน) | Monday, Mon |
| u | Day in week number (1=Mon...7=Sun) | 1 |
| a | AM/PM marker | PM, AM |
| H | Hour in day (0-23) | 0, 22 |
| k | Hour in day (1-24) | 1, 12, 24 |
| K | Hour in AM/PM (0-11) | 0, 5, 11 |
| h | Hour in AM/PM (1-12) | 1, 5, 12 |
| m | Minute in hour (นาที) | 25 |
| s | Second in minute (วินาที) | 24 |
| S | Millisecond (มิลลิวินาที) | 756 |
| z | Time zone (ชื่อ) | PST, GMT |
| Z | Time zone (offset RFC 822) | -0500 |
| X | Time zone (offset ISO 8601) | -06, -0600, -06:00 |
ตัวอย่างการ Parse รูปแบบต่างๆ
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
// รูปแบบ yyyy/dd/MM
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/dd/MM");
Date date = formatter.parse("2007/25/06");
System.out.println("Date value: " + date);
// รูปแบบ y:G (ปี:ยุค)
formatter = new SimpleDateFormat("y:G");
date = formatter.parse("1920:BC");
System.out.println("Date value: " + date);
// รูปแบบ D-M-Y (วัน-เดือน-ปีสัปดาห์)
formatter = new SimpleDateFormat("D-M-Y");
date = formatter.parse("25-05-1989");
System.out.println("Date value: " + date);
}
}
ผลลัพธ์
Date value: Mon Jun 25 00:00:00 IST 2007 Date value: Sun Jan 01 00:00:00 IST 1920 Date value: Sun Jan 01 00:00:00 IST 1989
ตัวอย่างเพิ่มเติม: เวลา และรูปแบบผสม
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
// เวลา HH:mm:ss
SimpleDateFormat formatter1 = new SimpleDateFormat("HH:mm:ss");
Date time1 = formatter1.parse("07:25:30");
System.out.println("Time value: " + time1);
// รูปแบบผสม EEE:MMM-d:YYYY
SimpleDateFormat formatter2 = new SimpleDateFormat("EEE:MMM-d:YYYY");
Date time2 = formatter2.parse("Sun:Jan-8:2018");
System.out.println("Date value: " + time2);
// ใช้ single quote สำหรับ literal text: hh 'o''clock' a
SimpleDateFormat formatter3 = new SimpleDateFormat("hh 'o''clock' a");
Date time3 = formatter3.parse("09 o'clock AM");
System.out.println("Date value: " + time3);
}
}
ผลลัพธ์
Time value: Thu Jan 01 07:25:30 IST 1970 Date value: Sun Dec 31 00:00:00 IST 2017 Date value: Thu Jan 01 09:00:00 IST 1970
⚠️ ข้อควรระวังสำคัญ
- SimpleDateFormat ไม่ใช่ Thread-Safe - ไม่ควรใช้ shared instance ใน multi-threaded environment
- ใช้ DateTimeFormatter (Java 8+) แทน - immutable และ thread-safe
- Pattern letters ตัวพิมพ์เล็ก/ใหญ่ มีความหมายต่างกัน (เช่น y vs Y, d vs D)
- ใช้ single quote
'ห่อ literal text เช่น'o''clock'
การแปลงเป็น DateTimeFormatter (Java 8+)
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/dd/MM");
LocalDateTime date = LocalDateTime.parse("2007/25/06", formatter);