📅 تعلم كيفية التعامل مع التواريخ والوقت في جافا: دليلك الشامل لـ Date و Calendar
في عالم البرمجة، غالباً ما نحتاج للتعامل مع التواريخ والأوقات، سواءً لتسجيل وقت إنشاء مستخدم جديد، أو حساب مدة اشتراك، أو عرض تاريخ مقال. في لغة جافا، توجد عدة طرق للتعامل مع هذه المهمة. في هذا الدرس، سنركز على الأساسيات باستخدام الكلاس Date من الحزمة java.util.
🧱 ما هو الكلاس java.util.Date؟
يمثل الكلاس Date لحظة محددة في الزمن، بدقة تصل إلى المللي ثانية. عند إنشاء كائن Date جديد، يتم تعيينه تلقائياً إلى التاريخ والوقت الحاليين للنظام.
ملاحظة مهمة: العديد من دوال Date الأصلية (مثل getYear()) أصبحت مهملة (deprecated) ولا يوصى باستخدامها في الشيفرات الجديدة. ومع ذلك، فهم أساس الكلاس لا يزال ضرورياً، وسنرى البدائل الحديثة لاحقاً في الدروس القادمة.
✨ كيفية إنشاء تاريخ جديد
أسهل طريقة هي إنشاء كائن Date يمثل اللحظة الحالية.
import java.util.Date;
public class Main {
public static void main(String[] args) {
// إنشاء كائن Date يمثل التاريخ والوقت الحاليين
Date currentDate = new Date();
System.out.println("التاريخ والوقت الحاليان: " + currentDate);
}
}
عند تشغيل هذا الكود، سيطبع شيئاً مثل: التاريخ والوقت الحاليان: Thu May 16 14:30:45 AST 2024
⏳ مقارنة تواريخ مختلفة
يحتوي الكلاس Date على دوال مفيدة لمقارنة التواريخ. الدالتان الأكثر استخداماً هما before() و after().
import java.util.Date;
public class Main {
public static void main(String[] args) throws InterruptedException {
Date date1 = new Date(); // اللحظة الحالية
System.out.println("date1: " + date1);
// نوقف البرنامج لمدة 1000 مللي ثانية (ثانية واحدة)
Thread.sleep(1000);
Date date2 = new Date(); // لحظة بعد ثانية
System.out.println("date2: " + date2);
// Is date1 before date2?
boolean isBefore = date1.before(date2);
System.out.println("Is date1 before date2? " + isBefore); // will print true
// Is date2 after date1?
boolean isAfter = date2.after(date1);
System.out.println("Is date2 after date1? " + isAfter); // will print true
}
}
🔢 تحويل Date إلى مللي ثانية والعكس
في العمق، يخزن الكائن Date الوقت كعدد مللي ثانية مرت منذ منتصف ليل 1 يناير 1970 (ويسمى هذا "عصر يونكس" أو Unix Epoch). يمكننا الحصول على هذه القيمة وتحويلها.
import java.util.Date;
public class Main {
public static void main(String[] args) {
Date now = new Date();
// الحصول على الوقت بالمللي ثانية منذ 1 يناير 1970
long milliseconds = now.getTime();
System.out.println("Milliseconds: " + milliseconds);
// إنشاء كائن Date جديد من عدد المللي ثانية
Date dateFromMilliseconds = new Date(milliseconds);
System.out.println("Date from milliseconds: " + dateFromMilliseconds);
}
}
📊 مقارنة التواريخ باستخدام compareTo()
تُستخدم هذه الدالة لمقارنة تاريخين. ترجع:
- رقم سالب إذا كان التاريخ الأصلي (
this) قبل التاريخ الممرر كمعامل. - صفر إذا كانا متساويين.
- رقم موجب إذا كان التاريخ الأصلي بعد التاريخ الممرر كمعامل.
import java.util.Date;
public class Main {
public static void main(String[] args) throws InterruptedException {
Date dateA = new Date();
Thread.sleep(50); // تأخير بسيط
Date dateB = new Date();
int comparisonResult = dateA.compareTo(dateB);
System.out.println("Result of comparing dateA and dateB: " + comparisonResult); // will be negative because dateA is older
}
}
📝 ملخص سريع
java.util.Dateيمثل لحظة في الزمن.new Date()ينشئ تاريخاً للوقت الحالي.before()وafter()لمقارنة التواريخ بسهولة.getTime()يُرجع الوقت بالمللي ثانية منذ 1 يناير 1970.compareTo()لمقارنة تواريخ وإرجاع نتيجة رقمية.
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال