Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธี Parse Date จาก String รูปแบบ dd/MM/yyyy เป็น dd/MM/yyyy ใน Java

ใช้ 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)