العمل مع التواريخ في Kotlin: نظرة عامة على المكتبات والأدوات
العمل مع التواريخ والوقت هو إحدى المهام الأساسية في معظم التطبيقات. في Kotlin، كلغة حديثة متعددة المنصات، توجد عدة طرق للعمل مع التواريخ. في هذه المقالة، سنستعرض المكتبات والأدوات الرئيسية التي ستساعدك على إدارة التواريخ والوقت والفترات الزمنية والمناطق الزمنية بكفاءة في مشاريع Kotlin.
1. مكتبة Java القياسية: java.time
نظرًا لأن Kotlin متوافق تمامًا مع Java، يمكنك استخدام المكتبة القوية java.time (JSR-310) التي ظهرت في Java 8. هذه هي الطريقة الموصى بها لتطبيقات الخادم وتطبيقات Android (بدءًا من API 26+).
الفئات الرئيسية:
LocalDate— التاريخ بدون وقت (السنة، الشهر، اليوم).LocalTime— الوقت بدون تاريخ.LocalDateTime— التاريخ والوقت بدون منطقة زمنية.ZonedDateTime— التاريخ والوقت مع المنطقة الزمنية.Instant— لحظة زمنية في UTC (الوقت الآلي).DurationوPeriod— الفترات الزمنية.
مثال على الاستخدام:
import java.time.*
fun main() { // التاريخ والوقت الحالي val now = LocalDateTime.now() println("الآن: $now")
// إنشاء تاريخ محدد val birthDate = LocalDate.of(1990, Month.JUNE, 15) println("تاريخ الميلاد: $birthDate")
// العمل مع المناطق الزمنية val zonedDateTime = ZonedDateTime.now(ZoneId.of("Europe/Moscow")) println("الوقت في موسكو: $zonedDateTime")
// الفرق بين التواريخ val from = LocalDate.of(2023, 1, 1) val to = LocalDate.now() val daysBetween = ChronoUnit.DAYS.between(from, to) println("عدد الأيام منذ رأس السنة: $daysBetween")
// التنسيق val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm") println("التاريخ المنسق: ${now.format(formatter)}")}المزايا: مدمجة، موثوقة، دعم كامل لجميع الوظائف.
العيوب: غير مدعومة على Android القديم (قبل API 26) بدون desugaring.
2. kotlinx-datetime (مكتبة متعددة المنصات من JetBrains)
للمشاريع متعددة المنصات (KMP)، أنشأت JetBrains مكتبة kotlinx-datetime. توفر واجهة برمجة تطبيقات موحدة لجميع المنصات (JVM، Native، JS).
الفئات الرئيسية:
Instant— لحظة زمنية في UTC.LocalDateTime— التاريخ+الوقت بدون منطقة زمنية.LocalDateوLocalTime.DateTimePeriodوDatePeriod— الفترات الزمنية.TimeZone— المنطقة الزمنية.
مثال على الاستخدام:
import kotlinx.datetime.*
fun main() { // اللحظة الحالية val now = Clock.System.now() println("UTC الحالي: $now")
// التحويل إلى الوقت المحلي val localDateTime = now.toLocalDateTime(TimeZone.currentSystemDefault()) println("الوقت المحلي: $localDateTime")
// إنشاء تاريخ val date = LocalDate(2024, 12, 25) println("التاريخ: $date")
// الفرق بين التواريخ val start = LocalDateTime(2024, 1, 1, 0, 0) val end = LocalDateTime(2024, 12, 31, 23, 59) val period = start.periodUntil(end, DateTimeUnit.DAY) println("عدد الأيام بينهما: $period")
// التنسيق (يتطلب مكتبة منفصلة أو يدويًا) println("السنة: ${localDateTime.year}، الشهر: ${localDateTime.monthNumber}")}المزايا: تعدد المنصات، خفة الوزن، دعم رسمي.
العيوب: إمكانيات تنسيق محدودة (لا يوجد DateTimeFormatter مدمج).