มีหลายวิธีสร้างอ็อบเจกต์ Date ใน Java ขึ้นอยู่กับความต้องการ
วิธีที่ 1: ใช้ java.util.Date Constructor (Current Time)
import java.util.Date;
public class CreateDate {
public static void main(String args[]) {
Date date = new Date(); // เวลาปัจจุบัน
System.out.print(date);
}
}
ผลลัพธ์
Thu Nov 02 15:43:01 IST 2018
วิธีที่ 2: ใช้ SimpleDateFormat.parse() (Specific Date - Legacy)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String args[]) throws ParseException {
String dateString = "26-09-1989";
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = formatter.parse(dateString);
System.out.println("Date value: " + date);
}
}
ผลลัพธ์
Date value: Tue Sep 26 00:00:00 IST 1989
วิธีที่ 3: ใช้ LocalDate (Java 8+) - แนะนำสำหรับวันที่อย่างเดียว
import java.time.LocalDate;
public class Test {
public static void main(String args[]) {
// of(year, month, day)
LocalDate date1 = LocalDate.of(2014, 9, 11);
System.out.println(date1);
// parse(ISO string)
LocalDate date2 = LocalDate.parse("2007-12-03");
System.out.println(date2);
// now()
LocalDate date3 = LocalDate.now();
System.out.println(date3);
}
}
ผลลัพธ์
2014-09-11 2007-12-03 2020-11-05
วิธีที่ 4: ใช้ LocalDateTime (Java 8+) - วันที่ + เวลา
import java.time.LocalDateTime;
LocalDateTime dt1 = LocalDateTime.of(2014, 9, 11, 10, 30);
LocalDateTime dt2 = LocalDateTime.parse("2007-12-03T10:30:00");
LocalDateTime dt3 = LocalDateTime.now();
วิธีที่ 5: ใช้ ZonedDateTime (Java 8+) - วันที่ + เวลา + Time Zone
import java.time.ZonedDateTime;
import java.time.ZoneId;
ZonedDateTime zdt = ZonedDateTime.of(2014, 9, 11, 10, 30, 0, 0, ZoneId.of("Asia/Bangkok"));
ตารางสรุป: เลือกใช้คลาสไหน?
| ความต้องการ | คลาสแนะนำ | เวอร์ชัน | Thread-Safe |
|---|---|---|---|
| วันที่อย่างเดียว | LocalDate | 8+ | ใช่ |
| เวลาอย่างเดียว | LocalTime | 8+ | ใช่ |
| วันที่+เวลา (Local) | LocalDateTime | 8+ | ใช่ |
| วันที่+เวลา+Time Zone | ZonedDateTime | 8+ | ใช่ |
| Timestamp (UTC) | Instant | 8+ | ใช่ |
| Legacy Date | java.util.Date | 1.1+ | ไม่ |
| Legacy Calendar | GregorianCalendar | 1.1+ | ไม่ |
Best Practice
- Java 8+ → ใช้ java.time.* ทุกกรณี (Immutable, Thread-safe, API ดี)
- Legacy only → ใช้ Date/Calendar เมื่อบังคับต้องรองรับโค้ดเก่า
- Database → ใช้ java.sql.Date (DATE) หรือ java.sql.Timestamp (TIMESTAMP)