คลาส LocalTime (Java 8+) แทนเวลาโดยไม่มี time zone มีเมธอด isBefore(), isAfter(), isEqual() สำหรับเปรียบเทียบ
ตัวอย่างที่ 1: ใช้ LocalTime (แนะนำ)
import java.time.LocalTime;
public class Test {
public static void main(String args[]) {
LocalTime time1 = LocalTime.of(10, 15, 45);
LocalTime time2 = LocalTime.of(7, 25, 55);
if (time1.isAfter(time2)) {
System.out.println(time1 + " is after " + time2);
} else if (time1.isBefore(time2)) {
System.out.println(time1 + " is before " + time2);
} else {
System.out.println(time1 + " is equal to " + time2);
}
}
}
ผลลัพธ์
10:15:45 is after 07:25:55
ตัวอย่างที่ 2: ใช้ SimpleDateFormat + Date (Legacy)
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class CreateDateTime {
public static void main(String args[]) throws ParseException {
String timeStr1 = "8:27:45 AM";
String timeStr2 = "2:30:12 PM";
// รูปแบบ: HH:mm:ss a (แต่ตัวอย่างเดิมใช้ SS แทน ss - bug)
SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss a");
Date dateTime1 = formatter.parse(timeStr1);
Date dateTime2 = formatter.parse(timeStr2);
if (dateTime1.after(dateTime2)) {
System.out.println(timeStr1 + " is after " + timeStr2);
} else if (dateTime1.before(dateTime2)) {
System.out.println(timeStr1 + " is before " + timeStr2);
} else {
System.out.println(timeStr1 + " is equal to " + timeStr2);
}
}
}
ผลลัพธ์ (ที่ถูกต้อง)
8:27:45 AM is before 2:30:12 PM
⚠️ ข้อผิดพลาดในต้นฉบับ: ใช้ pattern "HH:mm:SS a" ผิด (SS = fractional seconds) ควรเป็น "hh:mm:ss a" และผลลัพธ์ต้นฉบับผิด (บอกว่า AM after PM)
วิธีที่ 3: ใช้ LocalTime.parse() กับ DateTimeFormatter
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
public class TimeCompare {
public static void main(String args[]) {
String timeStr1 = "08:27:45";
String timeStr2 = "14:30:12";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalTime time1 = LocalTime.parse(timeStr1, formatter);
LocalTime time2 = LocalTime.parse(timeStr2, formatter);
System.out.println(time1.isBefore(time2) ? "time1 ก่อน time2" : "time1 หลังหรือเท่ากับ time2");
}
}
สรุปเมธอดเปรียบเทียบเวลา
| คลาส | เมธอด | คืนค่า | Thread-Safe |
|---|---|---|---|
| LocalTime | isBefore, isAfter, isEqual, compareTo | boolean / int | ใช่ |
| Date | before, after, equals, compareTo | boolean / int | ไม่ |
| Calendar | before, after, equals, compareTo | boolean / int | ไม่ |
Best Practice
- ใช้ LocalTime สำหรับเวลาอย่างเดียว (Java 8+)
- ใช้ LocalDateTime สำหรับวันที่+เวลา
- ระบุ DateTimeFormatter ชัดเจนเมื่อ parse จาก String
- หลีกเลี่ยง SimpleDateFormat และ Date สำหรับโค้ดใหม่