บทนำ

การทำงานกับวันที่และเวลาในโปรแกรมมิ่งมักจะเป็นเรื่องท้าทาย ใน Java หากคุณพยายามแปลงการแสดงผลวันที่ในรูปแบบสตริงให้เป็นวัตถุ Date คุณอาจพบปัญหาเกี่ยวกับการจัดรูปแบบ หนึ่งในสถานการณ์ที่พบได้บ่อยคือเมื่อคุณมีสตริงวันที่เช่น “Thu Nov 30 19:00:00 EST 2006” และคุณต้องการแยกข้อมูลให้ถูกต้อง บล็อกโพสต์นี้จะชี้แจงวิธีการจัดการกับสถานการณ์นี้โดยใช้ SimpleDateFormat

ปัญหา

คุณมีวันที่ถูกเก็บในรูปแบบสตริง และคุณต้องการสร้างวัตถุ Date จากมันโดยอัตโนมัติ คุณจะพบปัญหาหลักสองประการ:

  1. การกำหนดรูปแบบที่ถูกต้อง ที่จะใช้กับ SimpleDateFormat
  2. การหาวิธีที่จะแยกวิเคราะห์รูปแบบสตริงวันที่ต่างๆ แบบไดนามิก โดยไม่ต้องกำหนดค่าอย่างตายตัว

มาจัดการปัญหาทั้งสองนี้แบบทีละขั้นตอนกันเถอะ

วิธีแก้ไข

ใช้ SimpleDateFormat

ในการแปลงสตริงให้เป็นวัตถุ Date คุณจะใช้คลาส SimpleDateFormat นี่คือวิธีที่คุณสามารถทำได้:

ขั้นตอนที่ 1: กำหนดรูปแบบวันที่

จากรูปแบบสตริงวันที่ที่ให้ไว้ คุณจำเป็นต้องให้รูปแบบที่เหมาะสมใน SimpleDateFormat สำหรับตัวอย่างสตริงวันที่ “Thu Nov 30 19:00:00 EST 2006” รูปแบบจะเป็น:

new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

ขั้นตอนที่ 2: แยกวิเคราะห์สตริงวันที่

นี่คือวิธีที่คุณสามารถใช้ SimpleDateFormat ในสตริงโค้ด Java ง่ายๆ:

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

public class DateParser {
    public static void main(String[] args) {
        String dateString = "Thu Nov 30 19:00:00 EST 2006";
        SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");

        try {
            Date date = formatter.parse(dateString);
            System.out.println("วันที่ที่แยกวิเคราะห์แล้ว: " + date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

คำอธิบายของรูปแบบ:

  • EEE: วันในสัปดาห์ (เช่น Thu)
  • MMM: เดือน (เช่น Nov)
  • dd: วันที่ในเดือน (เช่น 30)
  • HH: ชั่วโมงในรูปแบบ 24 ชั่วโมง (เช่น 19)
  • mm: นาที (เช่น 00)
  • ss: วินาที (เช่น 00)
  • zzz: โซนเวลา (เช่น EST)
  • yyyy: ปี (เช่น 2006)

การจัดการรูปแบบไดนามิก

ตอนนี้ เกี่ยวกับคำถามที่สองของคุณเรื่องการกำหนดรูปแบบวันที่แบบไดนามิก - โชคร้ายที่ไม่มีไลบรารี Java ที่ติดมากับตัวที่จะสกัดกรองรูปแบบวันที่จากสตริงโดยอัตโนมัติ วิธีที่ดีที่สุดคือโดยปกติแล้วจะต้องกำหนดรูปแบบที่คาดหวังในแอปพลิเคชันของคุณและใช้มัน

ทางเลือกที่เป็นไปได้

ในขณะที่ไม่มี API โดยตรงที่มีอยู่เพื่อสกัดรูปแบบ คุณอาจพิจารณา:

  • ใช้การแสดงออกปกติ เพื่อจับคู่รูปแบบที่คาดหวังต่างๆ
  • สร้างแผนที่ของรูปแบบที่พบได้บ่อย และทดสอบกับพวกมัน
  • ใช้ไลบรารีของบุคคลที่สาม เช่น Joda-Time หรือแพ็กเกจ java.time ของ Java 8 ซึ่งช่วยปรับปรุงการจัดการวันที่และเวลา ถึงแม้ว่าคุณจะต้องกำหนดรูปแบบที่คาดหวังเช่นกัน

สรุป

โดยสรุป การแปลงการแสดงผลปีวันที่เป็นวัตถุ Date ใน Java ต้องการการจัดรูปแบบที่แม่นยำโดยใช้ SimpleDateFormat ในขณะที่การกำหนดรูปแบบไดนามิกไม่ใช่เรื่องง่าย การสร้างกลยุทธ์สำหรับการรักษารูปแบบที่รู้จักสามารถทำให้กระบวนการของคุณมีประสิทธิภาพมากขึ้น ด้วยคำแนะนำนี้ คุณควรมีความพร้อมที่จะจัดการกับความท้าทายในการแยกวิเคราะห์สตริงวันที่ส่วนใหญ่ในแอปพลิเคชัน Java ของคุณ

หากต้องการอ่านเพิ่มเติมเกี่ยวกับ SimpleDateFormat โปรดตรวจสอบ เอกสาร Java อย่างเป็นทางการ.