Java Programming

مقارنة التواريخ في جافا: دليل شامل

Spread the love

مقارنة التواريخ في جافا: دليل شامل

توفر جافا عدة طرق لمقارنة التواريخ، لكل منها نقاط قوتها وضعفها. يستعرض هذا الدليل أكثر الطرق شيوعًا، مع التركيز على كل من فئة `java.util.Date` القديمة وواجهة برمجة التطبيقات الحديثة `java.time`، والتي يوصى بها بشدة للمشاريع الجديدة.

محتويات

استخدام `before()` و `after()`

توفر طريقتا `before()` و `after()`، جزء من فئة `java.util.Date`، مقارنات بسيطة. `before(Date otherDate)` تُرجع `true` إذا كان التاريخ الحالي قبل `otherDate`، و `after(Date otherDate)` تُرجع `true` إذا كان بعده. ومع ذلك، تذكر أن `java.util.Date` تتضمن معلومات الوقت، مما يؤثر على المقارنة.


import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateComparison {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = formatter.parse("2023-10-26");
        Date date2 = formatter.parse("2024-01-15");

        System.out.println("date1 before date2: " + date1.before(date2)); // true
        System.out.println("date2 after date1: " + date2.after(date1)); // true
    }
}

استخدام `equals()`

تتحقق طريقة `equals()` من المساواة التامة بين كائنين من نوع `java.util.Date`. يجب أن تتطابق كل من مكونات التاريخ والوقت حتى تُرجع `true`. حتى فرق قدره مللي ثانية واحدة سيؤدي إلى `false`.


import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateComparison {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date1 = formatter.parse("2023-10-26 10:00:00");
        Date date2 = formatter.parse("2023-10-26 10:00:00");

        System.out.println("date1 equals date2: " + date1.equals(date2)); // true
    }
}

استخدام `compareTo()`

توفر طريقة `compareTo(Date otherDate)` مقارنة أكثر دقة. وهي تُرجع:

  • قيمة سالبة إذا كان التاريخ الحالي قبل `otherDate`.
  • صفر إذا كان التاريخان متساويين.
  • قيمة موجبة إذا كان التاريخ الحالي بعد `otherDate`.

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class DateComparison {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = formatter.parse("2023-10-26");
        Date date2 = formatter.parse("2024-01-15");

        System.out.println("date1 compareTo date2: " + date1.compareTo(date2)); // Negative
        System.out.println("date2 compareTo date1: " + date2.compareTo(date1)); // Positive
    }
}

مقارنة التاريخ/الوقت الحديثة مع `java.time`

توفر واجهة برمجة التطبيقات `java.time` (Java 8 والإصدارات الأحدث) نهجًا متفوقًا في معالجة التاريخ والوقت. تقدم فئات مثل `LocalDate` و `LocalDateTime` و `ZonedDateTime` مقارنات أكثر دقة ووضوحًا. كما أنها تتجنب عيوب `java.util.Date`.


import java.time.LocalDate;
import java.time.LocalDateTime;

public class ModernDateComparison {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2023, 10, 26);
        LocalDate date2 = LocalDate.of(2024, 1, 15);

        System.out.println("date1 is before date2: " + date1.isBefore(date2)); // true
        System.out.println("date1 is after date2: " + date1.isAfter(date2)); // false
        System.out.println("date1 equals date2: " + date1.equals(date2)); // false


        LocalDateTime dateTime1 = LocalDateTime.of(2023, 10, 26, 10, 0, 0);
        LocalDateTime dateTime2 = LocalDateTime.of(2023, 10, 26, 10, 0, 0);
        System.out.println("dateTime1 equals dateTime2: " + dateTime1.equals(dateTime2)); //true

    }
}

توفر طرق واجهة برمجة التطبيقات `java.time` (مثل `isBefore()` و `isAfter()` و `equals()`) مقارنات واضحة لا لبس فيها، مما يجعل شفرتك أكثر قابلية للقراءة والصيانة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *