คลาส java.text.SimpleDateFormat ใช้สำหรับจัดรูปแบบและแปลงสตริงเป็นวันที่ และวันที่เป็นสตริง
ขั้นตอนการแปลง
- สร้างอ็อบเจกต์ SimpleDateFormat โดยส่งรูปแบบวันที่ที่ต้องการ
- แปลงสตริงวันที่เป็นอ็อบเจกต์ Date ด้วยเมธอด parse()
- ดึงค่า epoch time (มิลลิวินาทีจาก 1 ม.ค. 1970) ด้วยเมธอด getTime()
ตัวอย่าง 1: ใช้ SimpleDateFormat
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Sample {
public static void main(String args[]) throws ParseException {
// กำหนดรูปแบบวันที่
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
// แปลงสตริงเป็น Date
String str = "25-08-2009 11:20:45";
Date date = dateFormatter.parse(str);
// ดึงค่ามิลลิวินาที
long msec = date.getTime();
System.out.println("Epoch ของวันที่กำหนด: " + msec);
}
}
ผลลัพธ์
Epoch ของวันที่กำหนด: 1251179445000
ตัวอย่าง 2: ใช้ Calendar
สามารถตั้งค่าวันที่และเวลาให้อ็อบเจกต์ Calendar ด้วยเมธอด set() แล้วดึงค่าด้วย getTimeInMillis()
import java.util.Calendar;
public class Sample {
public static void main(String args[]) {
Calendar cal = Calendar.getInstance();
// ปี, เดือน(0-11), วัน, ชั่วโมง, นาที, วินาที
cal.set(2014, 9, 11, 10, 25, 30);
long msec = cal.getTimeInMillis();
System.out.print(msec);
}
}
ผลลัพธ์
1413003330758
ตัวอย่าง 3: ใช้ ZonedDateTime (Java 8+)
ใช้เมธอด of() สร้าง ZonedDateTime แล้วแปลงเป็น Instant และดึงค่าด้วย toEpochMilli()
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class Sample {
public static void main(String args[]) {
// สร้าง ZonedDateTime พร้อมโซนเวลา
ZoneId id = ZoneId.of("Asia/Bangkok");
ZonedDateTime obj = ZonedDateTime.of(2014, 9, 11, 10, 25, 30, 0, id);
Instant instant = obj.toInstant();
long msec = instant.toEpochMilli();
System.out.println("Milli Seconds: " + msec);
}
}
ผลลัพธ์
Milli Seconds: 1410411330000
สรุปวิธีการ
| คลาส/เมธอด | เวอร์ชัน Java | คำอธิบาย |
|---|---|---|
| SimpleDateFormat + Date.getTime() | Java 1.1+ | แบบเก่า ยังใช้งานได้ แต่ไม่แนะนำสำหรับโปรเจกต์ใหม่ |
| Calendar.getTimeInMillis() | Java 1.1+ | คลาสเก่า มีปัญหาเรื่อง thread-safety |
| ZonedDateTime.toInstant().toEpochMilli() | Java 8+ | แนะนำให้ใช้ รองรับ Time Zone ได้ดี |