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

SimpleDateFormat ใน Java คืออะไร และการใช้งาน


คลาส java.text.SimpleDateFormat ใช้สำหรับ จัดรูปแบบ (Format) วันที่เป็นสตริง และ แปลง (Parse) สตริงเป็นวันที่

1. การ Parse สตริงเป็น Date

  1. สร้าง SimpleDateFormat ด้วย pattern string
  2. ใช้ parse(String) แปลงเป็น Date
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Sample {
    public static void main(String args[]) throws ParseException {
        String dateString = "2007-25-06";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
        Date date = formatter.parse(dateString);
        System.out.println("Date value: " + date);
    }
}

ผลลัพธ์

Date value: Mon Jun 25 00:00:00 IST 2007

2. การดึง Pattern String (toPattern)

เมธอด toPattern() คืนค่า pattern string ของ formatter ปัจจุบัน

import java.text.SimpleDateFormat;

public class Demo {
    public static void main(String args[]) {
        SimpleDateFormat obj = new SimpleDateFormat();
        String pattern = obj.toPattern();
        System.out.println(pattern);  // Default pattern
    }
}

ผลลัพธ์

M/d/yy h:mm a

3. การ Parse วันที่จากข้อความ (ParsePosition)

เมธอด parse(String, ParsePosition) แปลงวันที่จากตำแหน่งที่ระบุในข้อความ

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Sample {
    public static void main(String args[]) throws ParseException {
        String text = "Marriage date of Samrat is 2007-25-06";
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-dd-MM");
        
        // เริ่ม parse จาก index 27
        ParsePosition pos = new ParsePosition(27);
        Date date = formatter.parse(text, pos);
        System.out.println("Date value: " + date);
    }
}

ผลลัพธ์

Date value: Mon Jun 25 00:00:00 IST 2007

⚠️ ข้อจำกัดสำคัญของ SimpleDateFormat

ไม่ใช่ Thread-Safe! SimpleDateFormat เป็น mutable stateful class การใช้ shared instance ใน multi-thread จะทำให้เกิดข้อมูลผิดพลาดหรือ Exception

แนวทางแก้ไข Thread-Safety

  • สร้าง instance ใหม่ทุกครั้ง (อาจช้า)
  • ใช้ ThreadLocal (แนะนำสำหรับ Legacy code)
  • ย้ายไปใช้ DateTimeFormatter (Java 8+) - Immutable และ Thread-Safe ← Best Choice

การย้ายไป DateTimeFormatter (Java 8+)

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

// Thread-safe, immutable
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-dd-MM");
LocalDate date = LocalDate.parse("2007-25-06", formatter);
String formatted = date.format(formatter);