العمل مع التواريخ والوقت في Java: دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في التعامل مع التواريخ والوقت في Java

التعامل مع التواريخ والوقت هو من أكثر المهام شيوعًا في تطوير التطبيقات. توفر Java أدوات قوية لهذا الغرض. لفترة طويلة، كانت الفئة الرئيسية هي java.util.Date، لكنها كانت تعاني من عيوب خطيرة: قابلية التغيير، والارتباك في الأشهر (تبدأ من 0)، وعدم دعم المناطق الزمنية. مع إصدار Java 8، تغير الوضع جذريًا — ظهرت Date/Time API الجديدة (الحزمة java.time)، وهي آمنة للاستخدام مع الخيوط، وغير قابلة للتغيير، وبديهية. في هذه المقالة، سنستعرض كلا النهجين، لكننا سنركز بشكل أساسي على الـ API الحديثة.



1. الـ Legacy API: Date و Calendar

على الرغم من أنه لا يُنصح باستخدام الفئات القديمة في الكود الجديد، إلا أنك قد تواجهها في المشاريع القديمة. دعنا نستعرض النقاط الرئيسية.



فئة Date

فئة java.util.Date تمثل لحظة زمنية محددة بدقة تصل إلى الميلي ثانية. تحتوي على العديد من الطرق القديمة.

import java.util.Date;

public class LegacyDateExample { public static void main(String[] args) { // التاريخ والوقت الحاليين Date now = new Date(); System.out.println("التاريخ الحالي: " + now);

// التاريخ بناءً على الميلي ثانية (من 1 يناير 1970) Date specificDate = new Date(1000000000000L); System.out.println("التاريخ بناءً على timestamp: " + specificDate);

// مقارنة التواريخ Date earlier = new Date(0); boolean isBefore = earlier.before(now); // true System.out.println("هل هو أقدم؟ " + isBefore); }}


فئة Calendar

java.util.Calendar — أداة أكثر مرونة ولكنها ضخمة. تسمح بالتلاعب بحقول التاريخ.

import java.util.Calendar;

public class CalendarExample { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); // تعيين تاريخ محدد: 25 ديسمبر 2024 cal.set(2024, Calendar.DECEMBER, 25, 10, 30, 0); System.out.println("التاريخ: " + cal.getTime());

// إضافة أسبوعين cal.add(Calendar.WEEK_OF_YEAR, 2); System.out.println("بعد أسبوعين: " + cal.getTime());

// الحصول على حقول فردية int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); int month = cal.get(Calendar.MONTH) + 1; // +1 لأن يناير = 0 System.out.println("اليوم: " + dayOfMonth + ", الشهر: " + month); }}

العيوب: قابلية التغيير (طريقة add تغير الكائن الأصلي)، صعوبة التنسيق، الارتباك مع المناطق الزمنية.



2. الـ Date/Time API الحديثة (Java 8+)

الحزمة java.time تتضمن فئات رئيسية: LocalDate، LocalTime، LocalDateTime، ZonedDateTime، Instant وغيرها. جميعها غير قابلة للتغيير وآمنة للاستخدام مع الخيوط.



LocalDate — التعامل مع التاريخ

تخزن التاريخ بدون وقت أو منطقة زمنية (السنة، الشهر، اليوم).

import java.time.LocalDate;import java.time.Month;

public class LocalDateExample { public static void main(String[] args) { // التاريخ الحالي LocalDate today = LocalDate.now(); System.out.println("اليوم: " + today);

// تاريخ محدد LocalDate newYear = LocalDate.of(2025, Month.JANUARY, 1); System.out.println("رأس السنة: " + newYear);

// عمليات حسابية على التواريخ LocalDate nextWeek = today.plusWeeks(1); LocalDate lastMonth = today.minusMonths(1); System.out.println("بعد أسبوع: " + nextWeek); System.out.println("قبل شهر: " + lastMonth);

// المقارنة boolean isAfter = today.isAfter(newYear); // false System.out.println("هل اليوم بعد رأس السنة؟ " + isAfter); }}


LocalTime — التعامل مع الوقت

تخزن الوقت (الساعة

المدونات

توصيات الكتب