Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

วิธีเปรียบเทียบค่าเวลา (Time) ใน Java


คลาส 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
LocalTimeisBefore, isAfter, isEqual, compareToboolean / intใช่
Datebefore, after, equals, compareToboolean / intไม่
Calendarbefore, after, equals, compareToboolean / intไม่

Best Practice

  • ใช้ LocalTime สำหรับเวลาอย่างเดียว (Java 8+)
  • ใช้ LocalDateTime สำหรับวันที่+เวลา
  • ระบุ DateTimeFormatter ชัดเจนเมื่อ parse จาก String
  • หลีกเลี่ยง SimpleDateFormat และ Date สำหรับโค้ดใหม่