العمل مع التواريخ في Go (Golang): مكتبات time و carbon و now

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

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

ابدأ الدورة

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



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



1. الحزمة القياسية time



حزمة time هي الأساس للعمل مع التواريخ في Go. تتضمن أنواع Time و Duration، ودوال للتحليل والتنسيق والعمل مع المؤقتات والمناطق الزمنية.



إنشاء وتنسيق التاريخ



package main

import ( "fmt" "time")

func main() { // الوقت الحالي now := time.Now() fmt.Println("الآن:", now)

// إنشاء تاريخ محدد date := time.Date(2025, time.March, 15, 14, 30, 0, 0, time.UTC) fmt.Println("تاريخ محدد:", date)

// التنسيق (يجب استخدام "2006-01-02 15:04:05" كمرجع) fmt.Println("التنسيق:", date.Format("02.01.2006 15:04:05"))}


تحليل سلسلة نصية إلى تاريخ



func main() {    // التحليل مع تحديد التنسيق    str := "2025-03-15 14:30:00"    parsed, err := time.Parse("2006-01-02 15:04:05", str)    if err != nil {        panic(err)    }    fmt.Println("تم التحليل:", parsed)}


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



func main() {    loc, _ := time.LoadLocation("Europe/Moscow")    moscowTime := time.Now().In(loc)    fmt.Println("توقيت موسكو:", moscowTime)}


الفرق بين التواريخ



func main() {    start := time.Date(2025, 1, 1, 0, 0, 0, 0, time.UTC)    end := time.Date(2025, 12, 31, 23, 59, 59, 0, time.UTC)    duration := end.Sub(start)    fmt.Printf("الفرق: %v (بالساعات: %v)", duration, duration.Hours())}


2. مكتبة carbon



مكتبة carbon (github.com/golang-module/carbon) هي نسخة من مكتبة Carbon الشهيرة في PHP للغة Go. توفر واجهة 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.ToString())

// إنشاء تاريخ date := carbon.Parse("2025-03-15 14:30:00") fmt.Println("تم التحليل:", date.ToDateString())

// إضافة أيام future := carbon.Now().AddDays(10) fmt.Println("بعد 10 أيام:", future.ToDateString())

// الفرق بالأيام diff := carbon.Now().DiffInDays(carbon.Parse("2025-12-31")) fmt.Printf("حتى رأس السنة: %d يوم", diff)

// التنسيق fmt.Println("تنسيق مخصص:", carbon.Now().Format("d/m/Y H:i:s"))}


طرق مفيدة



  • StartOfDay() / EndOfDay() — بداية/نهاية اليوم
  • IsWeekend() / IsWeekday() — التحقق من يوم الأسبوع
  • Age() — العمر من تاريخ الميلاد
  • DiffForHumans() — فرق قابل للقراءة البشرية (مثل "منذ 3 أيام")


3. مكتبة now



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



التثبيت



go get github.com/jinzhu/now


أمثلة على الاستخدام



package main

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

func main() { // بداية اليوم beginningOfDay := now.BeginningOfDay() fmt.Println("

توصيات