أساسيات حزمة time
التعامل مع الوقت والمدد الزمنية والتنسيق
أساسيات حزمة time درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
time.Time — النوع الأساسي
النوع المحوري في حزمة time هو time.Time. احصل على الوقت الحالي باستخدام time.Now():
package main
import ("fmt"; "time")
func main() {
now := time.Now()
fmt.Println(now) // 2024-01-15 10:30:00.123456789 +0000 UTC
fmt.Println(now.Year()) // 2024
fmt.Println(now.Month()) // January
fmt.Println(now.Day()) // 15
fmt.Println(now.Hour()) // 10
fmt.Println(now.Minute()) // 30
fmt.Println(now.Weekday()) // Monday
}time.Duration
يمثل time.Duration الوقت المنقضي بوحدة النانوثانية. استخدم الثوابت ذات الأنواع لتحسين الوضوح:
package main
import ("fmt"; "time")
func main() {
d := 2*time.Hour + 30*time.Minute + 15*time.Second
fmt.Println(d) // 2h30m15s
fmt.Println(d.Hours()) // 2.504166...
fmt.Println(d.Minutes()) // 150.25
fmt.Println(d.Seconds()) // 9015
fmt.Println(d.Milliseconds()) // 9015000
}time.Add و time.Sub
أضف مدة زمنية إلى وقت، أو اطرح وقتين للحصول على مدة زمنية:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
tomorrow := now.Add(24 * time.Hour)
fmt.Println(tomorrow.Format("2006-01-02"))
deadline := now.Add(30 * time.Minute)
remaining := time.Until(deadline) // alias for deadline.Sub(now)
fmt.Printf("%.0f minutes left\n", remaining.Minutes())
}تنسيق الأوقات وتحليلها
يستخدم Go وقتًا مرجعيًا هو Mon Jan 2 15:04:05 MST 2006 باعتباره قالب التنسيق (القيم من 1 إلى 7 بالترتيب):
package main
import ("fmt"; "time")
func main() {
now := time.Now()
// Format
fmt.Println(now.Format("2006-01-02")) // 2024-01-15
fmt.Println(now.Format("02/01/2006 15:04:05")) // 15/01/2024 10:30:00
fmt.Println(now.Format(time.RFC3339)) // 2024-01-15T10:30:00Z
fmt.Println(now.Format(time.Kitchen)) // 10:30AM
}time.Parse — تحليل السلاسل النصية
حلّل سلسلة نصية إلى time.Time باستخدام القالب المرجعي نفسه:
package main
import ("fmt"; "time")
func main() {
s := "2024-01-15"
t, err := time.Parse("2006-01-02", s)
if err != nil {
fmt.Println("parse error:", err)
return
}
fmt.Println(t.Year(), t.Month(), t.Day()) // 2024 January 15
// Parse RFC3339 (ISO 8601):
t2, _ := time.Parse(time.RFC3339, "2024-01-15T10:30:00Z")
fmt.Println(t2)
}time.Sleep والمؤقتات
أوقف التنفيذ مؤقتًا باستخدام time.Sleep؛ وأنشئ مؤقتات تُشغّل مرة واحدة باستخدام time.NewTimer:
package main
import ("fmt"; "time")
func main() {
start := time.Now()
time.Sleep(100 * time.Millisecond)
fmt.Printf("slept for %v\n", time.Since(start))
// One-shot timer
timer := time.NewTimer(200 * time.Millisecond)
<-timer.C // blocks until timer fires
fmt.Println("timer fired")
}time.Ticker للأحداث المتكررة
يرسل time.NewTicker إشارات عبر قناته على فواصل زمنية منتظمة:
package main
import ("fmt"; "time")
func main() {
ticker := time.NewTicker(500 * time.Millisecond)
defer ticker.Stop() // always stop to avoid goroutine leak
for i := 0; i < 3; i++ {
t := <-ticker.C
fmt.Println("tick at", t.Format("15:04:05.000"))
}
}time.Since و time.Until
اختصارات ملائمة لقياس الوقت المنقضي والوقت المتبقي حتى وقوع حدث:
package main
import ("fmt"; "time")
func benchmark(fn func()) time.Duration {
start := time.Now()
fn()
return time.Since(start) // = time.Now().Sub(start)
}
func main() {
d := benchmark(func() { time.Sleep(50 * time.Millisecond) })
fmt.Printf("took %v\n", d)
deadline := time.Now().Add(5 * time.Minute)
fmt.Printf("%.0f minutes remaining\n", time.Until(deadline).Minutes())
}المناطق الزمنية
يتعامل Go مع المناطق الزمنية باستخدام time.Location. حمّل المناطق باستخدام time.LoadLocation:
package main
import ("fmt"; "time")
func main() {
utc := time.Now().UTC()
fmt.Println(utc)
loc, err := time.LoadLocation("America/New_York")
if err != nil { panic(err) }
nyTime := utc.In(loc)
fmt.Println(nyTime)
// Compare times — always in UTC internally
fmt.Println(utc.Equal(nyTime)) // true — same instant
}time.Unix — الطوابع الزمنية لـ Unix
حوّل بين time.Time والطوابع الزمنية لـ Unix:
package main
import ("fmt"; "time")
func main() {
now := time.Now()
unix := now.Unix() // seconds since epoch
unixMilli := now.UnixMilli() // milliseconds
unixNano := now.UnixNano() // nanoseconds
fmt.Println(unix, unixMilli, unixNano)
// Convert back:
t := time.Unix(unix, 0)
fmt.Println(t.Format(time.RFC3339))
}تحقق سريع
ما الوقت المرجعي الذي يستخدمه Go قالبًا للتنسيق؟
مراجعة: حزمة time
الملخص:
time.Now()— الوقت الحالي؛ ويمكن الوصول إلى الحقول عبر.Year()و.Month()وغيرهماtime.Duration— بوحدة النانوثانية؛ استخدمtime.Hourوtime.Minuteوغيرهماt.Format(layout)/time.Parse(layout, s)— يستخدم التنسيق الوقت المرجعي2006-01-02 15:04:05time.Since/time.Untilللوقت المنقضي أو المتبقيtime.NewTickerللأحداث الدورية — استخدم دائمًاdefer Stop()
الأسئلة الشائعة
هل درس «أساسيات حزمة time» مجاني؟
نعم — نص درس «أساسيات حزمة time» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «أساسيات حزمة time»؟
التعامل مع الوقت والمدد الزمنية والتنسيق تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أساسيات حزمة time»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- حزمتا fmt وstrings
- strconv وmath وsort
- أساسيات حزمة time
- حزمتا os وfilepath