العمل مع التواريخ في Go (Golang): نظرة عامة على المكتبات للتحليل والتنسيق والمعالجة

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

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

ابدأ الدورة

العمل مع التواريخ في Go (Golang): المكتبات والأدوات



تقدم لغة Go (Golang) مكتبة قياسية قوية time تغطي معظم مهام العمل مع التواريخ والأوقات. ومع ذلك، بالنسبة للعمليات المعقدة مثل تحليل التنسيقات غير القياسية، أو العمل مع التواريخ النسبية، أو الحسابات باستخدام التقويمات التجارية، أنشأ المجتمع عددًا من المكتبات المفيدة. في هذه المقالة، سنستعرض الإمكانيات المضمنة في Go بالإضافة إلى أفضل الحزم الخارجية للعمل مع التواريخ.



1. المكتبة المضمنة time



المكتبة القياسية time هي الأساس لأي عمليات مع التواريخ في Go. توفر:

  • الأنواع Time و Duration و Location
  • دوال للحصول على الوقت الحالي، وإنشاء التواريخ، والتحليل والتنسيق
  • دعم المناطق الزمنية والساعات الأحادية (monotonic clocks)


الحصول على الوقت الحالي

package main

import ( "fmt" "time")

func main() { now := time.Now() fmt.Println("الوقت الحالي:", now) fmt.Println("السنة:", now.Year()) fmt.Println("الشهر:", now.Month()) fmt.Println("اليوم:", now.Day())}


تنسيق التواريخ

في Go، يُستخدم تنسيق مرجعي خاص: Mon Jan 2 15:04:05 MST 2006 (الأرقام 1,2,3,4,5,6 بترتيب تصاعدي).

now := time.Now()fmt.Println(now.Format("2006-01-02 15:04:05"))   // 2025-03-15 14:30:00fmt.Println(now.Format("02 Jan 2006"))           // 15 Mar 2025fmt.Println(now.Format(time.RFC3339))            // 2025-03-15T14:30:00Z


تحليل السلاسل النصية

dateStr := "2025-03-15 14:30:00"t, err := time.Parse("2006-01-02 15:04:05", dateStr)if err != nil {    panic(err)}fmt.Println(t) // 2025-03-15 14:30:00 +0000 UTC


العمل مع المناطق الزمنية

loc, _ := time.LoadLocation("Europe/Moscow")moscowTime := time.Now().In(loc)fmt.Println("توقيت موسكو:", moscowTime.Format("15:04:05"))


2. مكتبة carbon



الحزمة github.com/golang-module/carbon هي نظير Go لمكتبة Carbon الشهيرة في PHP. توفر واجهة برمجة تطبيقات (API) مريحة للعمل مع التواريخ، بما في ذلك التواريخ النسبية والتنسيقات القابلة للقراءة البشرية والاستدعاءات المتسلسلة.



التثبيت

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.ToDateString()) // 2025-03-15

// التواريخ النسبية fmt.Println(now.AddDays(7).ToDateString()) // 2025-03-22 fmt.Println(now.SubMonths(1).ToDateString()) // 2025-02-15 fmt.Println(now.StartOfMonth().ToDateString()) // 2025-03-01 fmt.Println(now.EndOfMonth().ToDateString()) // 2025-03-31

// التنسيقات القابلة للقراءة البشرية fmt.Println(now.DiffForHumans()) // 刚刚 (الآن فقط)

// التحليل مع دعم تنسيقات متعددة t := carbon.Parse("2025-03-15 14:30:00") fmt.Println(t.ToDateTimeString()) // 2025-03-15 14:30:00

// العمل مع المناطق الزمنية cst := carbon.Now(carbon.NewYork) fmt.Println(cst.ToDateTimeString()) // الوقت في نيويورك}


3. مكتبة now



الحزمة github.com/jinzhu/now (من مؤلف GORM) توفر دوال مريحة للحصول على بداية ونهاية الفترات الزمنية.



التثبيت

go get github.com/jinzhu/now


أمثلة

package main

import ( "fmt" "github.com/jinzhu/now" "time")

func main() { t := time.Now() fmt.Println(now.BeginningOfMonth(t)) // 2025-03-01 00:00:00 fmt.Println(now.EndOfMonth(t)) // 2025-03-31 23:59:59 fmt.Println(now.BeginningOfYear(t))

توصيات