العمل مع التواريخ في Go (Golang): مراجعة شاملة للمكتبات
العمل مع التواريخ والوقت هو أحد أكثر المهام شيوعًا في تطوير الويب، والتحليلات، والواجهة الخلفية. في Go (Golang)، توفر المكتبة القياسية time مجموعة أدوات قوية، ولكنها ليست بديهية دائمًا. لتبسيط التطوير، توجد العديد من المكتبات الخارجية. في هذه المقالة، سنستعرض بالتفصيل الأساليب الرئيسية والمكتبات الشائعة للعمل مع التواريخ في Go.
1. الحزمة القياسية time
حزمة time هي أساس العمل مع التواريخ والوقت في Go. تتضمن أنواع Time و Duration و Location ووظائف للتنسيق والتحليل والحسابات.
الإمكانيات الأساسية:
- الوقت الحالي:
time.Now() - التنسيق: طريقة
.Format(layout string)- تستخدم تنسيقًا مرجعيًا خاصًاMon Jan 2 15:04:05 MST 2006(Go وُلد في عام 2006). - التحليل: دالة
time.Parse(layout, value string). - الحسابات: طرق
.Add(d Duration)و.Sub(t Time)و.AddDate(y, m, d int). - المناطق الزمنية:
time.LoadLocation(name string)وطريقة.In(loc *Location).
package main
import ( "fmt" "time")
func main() { // الوقت الحالي now := time.Now() fmt.Println("الآن:", now)
// التنسيق fmt.Println("تنسيق RFC3339:", now.Format(time.RFC3339)) fmt.Println("تنسيق مخصص:", now.Format("02.01.2006 15:04:05"))
// تحليل سلسلة نصية parsed, _ := time.Parse("2006-01-02", "2024-03-15") fmt.Println("تم التحليل:", parsed)
// العمل مع المناطق الزمنية loc, _ := time.LoadLocation("Europe/Moscow") moscowTime := now.In(loc) fmt.Println("الوقت في موسكو:", moscowTime)
// الحسابات tomorrow := now.AddDate(0, 0, 1) fmt.Println("غدًا:", tomorrow.Format("02.01.2006"))}خاصية: يستخدم Go تنسيقًا مرجعيًا فريدًا (2006-01-02T15:04:05Z07:00)، بدلاً من YYYY-MM-DD المألوف. يتطلب هذا التعود عليه، لكنه يزيل الغموض.
2. مكتبة carbon (نظير Carbon للغة PHP)
مكتبة carbon هي نسخة من مكتبة PHP الشهيرة Carbon. توفر واجهة fluent سهلة الاستخدام للعمل مع التواريخ.
التثبيت:
go get github.com/golang-module/carbon/v2أمثلة على الاستخدام:
package main
import ( "fmt" "github.com/golang-module/carbon/v2")
func main() { // التاريخ الحالي now := carbon.Now() fmt.Println("الآن:", now.ToDateTimeString())
// إنشاء تاريخ date := carbon.CreateFromDate(2024, 3, 15) fmt.Println("التاريخ:", date.ToDateString())
// الفرق بين التواريخ start := carbon.Parse("2024-01-01") end := carbon.Parse("2024-03-15") diff := start.DiffInDays(end) fmt.Printf("الأيام بينهما: %d", diff)
// تنسيقات مقروءة للإنسان fmt.Println("أمس:", carbon.Yesterday().ToDateString()) fmt.Println("غدًا:", carbon.Tomorrow().ToDateString())
// التحقق fmt.Println("هل اليوم عطلة نهاية الأسبوع؟", now.IsWeekend()) fmt.Println("هل الآن صباح؟", now.IsMorning())}المزايا: API بسيط، دعم الأحرف الصينية، التوطين، طرق للعمل مع بداية/نهاية اليوم، الأسبوع، الشهر.
3. مكتبة now (أداة بسيطة)
مكتبة now من مؤلف GORM هي أداة خفيفة لحساب بداية ونهاية الفترات الزمنية.