العمل مع التواريخ في Java: المكتبات والأدوات
العمل مع التواريخ والوقت هو أحد المهام الأساسية في أي تطبيق. في Java، لوقت طويل، كانت الفئات القياسية java.util.Date و java.util.Calendar تتعرض للنقد بسبب عدم الراحة، وقابلية التغيير، وضعف دعم المناطق الزمنية. ومع ذلك، مع إصدار Java 8، تغير الوضع جذريًا. في هذه المقالة، سنستعرض المكتبات والأدوات الرئيسية للعمل مع التواريخ في Java، والتي ستساعدك على كتابة كود نظيف وموثوق.
1. المكتبة القياسية java.time (Java 8+)
بدءًا من Java 8، أصبح لدى المطورين حزمة قوية java.time، المبنية على معيار ISO-8601. هذه هي الطريقة الموصى بها للعمل مع التواريخ والوقت. الفئات الرئيسية:
LocalDate— التاريخ بدون وقت (السنة، الشهر، اليوم).LocalTime— الوقت بدون تاريخ (الساعات، الدقائق، الثواني، النانو ثانية).LocalDateTime— مزيج من التاريخ والوقت.ZonedDateTime— التاريخ والوقت مع مراعاة المنطقة الزمنية.Instant— لحظة زمنية في UTC (للوقت الآلي).DurationوPeriod— للعمل مع الفترات الزمنية.
مثال: إنشاء وتنسيق التاريخ
import java.time.LocalDate;import java.time.format.DateTimeFormatter;
public class DateExample { public static void main(String[] args) { // التاريخ الحالي LocalDate today = LocalDate.now(); System.out.println("اليوم: " + today);
// إنشاء تاريخ محدد LocalDate birthDate = LocalDate.of(1990, 5, 15); System.out.println("تاريخ الميلاد: " + birthDate);
// التنسيق DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); String formatted = birthDate.format(formatter); System.out.println("التاريخ المنسق: " + formatted);
// تحليل سلسلة نصية String dateStr = "2023-12-31"; LocalDate parsedDate = LocalDate.parse(dateStr); System.out.println("تم التحليل: " + parsedDate); }}مثال: حساب الفرق بين التواريخ
import java.time.LocalDate;import java.time.Period;import java.time.temporal.ChronoUnit;
public class DateDifference { public static void main(String[] args) { LocalDate start = LocalDate.of(2020, 1, 1); LocalDate end = LocalDate.of(2024, 3, 15);
Period period = Period.between(start, end); System.out.println("الفرق: " + period.getYears() + " سنوات، " + period.getMonths() + " أشهر، " + period.getDays() + " أيام");
long daysBetween = ChronoUnit.DAYS.between(start, end); System.out.println("إجمالي الأيام: " + daysBetween); }}2. Joda-Time (للإصدارات القديمة من Java)
قبل ظهور java.time، كان المعيار الفعلي هو مكتبة Joda-Time. لقد وفرت فئات غير قابلة للتغيير (immutable) مريحة ودعمًا للمناطق الزمنية. إذا كنت تعمل مع Java 7 أو أقل، فإن Joda-Time هي خيار ممتاز.
الإضافة (Maven):
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.12.7</version></dependency>مثال: العمل مع Joda-Time
import org.joda.time.DateTime;import org.joda.time.Days;import org.joda.time.format.DateTimeFormat;import org.joda.time.format.DateTimeFormatter;
public class JodaExample { public static void main(String[] args) { // التاريخ والوقت الحاليين DateTime now = new DateTime(); System.out.println("الآن: " + now);
// إنشاء تاريخ DateTime specificDate =