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