ใช้ java.text.SimpleDateFormat (Legacy) หรือ java.time.format.DateTimeFormatter (Modern Java 8+)
วิธีที่ 1: SimpleDateFormat (Java 1.1+ Legacy)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class DateFormatExample {
public static Date parseDate(String dateStr, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(dateStr);
}
public static String formatDate(Date date, String pattern) {
return new SimpleDateFormat(pattern).format(date);
}
public static void main(String[] args) throws ParseException {
Scanner sc = new Scanner(System.in);
System.out.print("Enter date (dd-MM-yyyy): ");
String input = sc.nextLine(); // e.g., 26-09-1989
// Parse String -> Date
Date date = parseDate(input, "dd-MM-yyyy");
System.out.println("Date Object: " + date);
// Format Date -> String (รูปแบบต่างๆ)
System.out.println("dd-MM-yyyy: " + formatDate(date, "dd-MM-yyyy"));
System.out.println("MM-dd-yyyy: " + formatDate(date, "MM-dd-yyyy"));
System.out.println("yyyy-MM-dd: " + formatDate(date, "yyyy-MM-dd"));
System.out.println("dd/MM/yyyy: " + formatDate(date, "dd/MM/yyyy"));
}
}
ผลลัพธ์
Enter date (dd-MM-yyyy): 26-09-1989 Date Object: Tue Sep 26 00:00:00 ICT 1989 dd-MM-yyyy: 26-09-1989 MM-dd-yyyy: 09-26-1989 yyyy-MM-dd: 1989-09-26 dd/MM/yyyy: 26/09/1989
วิธีที่ 2: java.time (Java 8+) - แนะนำ
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class ModernDateFormat {
public static void main(String[] args) {
String input = "26/09/1989";
// Parse String -> LocalDate
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
LocalDate date = LocalDate.parse(input, inputFormatter);
System.out.println("LocalDate: " + date); // 1989-09-26
// Format LocalDate -> String (หลาย Pattern)
System.out.println("dd/MM/yyyy: " + date.format(DateTimeFormatter.ofPattern("dd/MM/yyyy")));
System.out.println("yyyy-MM-dd: " + date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
System.out.println("MMMM dd, yyyy: " + date.format(DateTimeFormatter.ofPattern("MMMM dd, yyyy", Locale.ENGLISH)));
System.out.println("EEEE, dd MMMM yyyy: " + date.format(DateTimeFormatter.ofPattern("EEEE, dd MMMM yyyy", new Locale("th", "TH"))));
}
}
ผลลัพธ์ (Modern)
LocalDate: 1989-09-26 dd/MM/yyyy: 26/09/1989 yyyy-MM-dd: 1989-09-26 MMMM dd, yyyy: September 26, 1989 EEEE, dd MMMM yyyy: วันอังคาร, 26 กันยายน 2532
เปรียบเทียบ
| Feature | SimpleDateFormat | DateTimeFormatter (Java 8+) |
|---|---|---|
| Thread-Safe | ❌ (Not Thread-Safe) | ✅ (Immutable, Thread-Safe) |
| API | Mutable, แบบเก่า | Immutable, Fluent, Rich |
| Timezone Handling | ยุ่งยาก (Calendar) | ชัดเจน (ZonedDateTime) |
| Locale Support | จำกัด | เต็มรูปแบบ |
สรุป
- Legacy/Maintenance: SimpleDateFormat (Pattern:
dd/MM/yyyy) - New Project (Java 8+): DateTimeFormatter + LocalDate/LocalDateTime (Thread-Safe, Better API)
- Pattern
dd/MM/yyyyใช้ได้ในทั้งสอง (แต่ SimpleDateFormat ใช้ y สำหรับ Year, DateTimeFormatter ใช้ y/u)