Go Academy · درس

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

تعامَل مع المواقع الجغرافية

الدرس 4 من 413 خطوة

المناطق الزمنية درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

يحمل الوقت منطقة زمنية

تحتوي كل قيمة time.Time على منطقة زمنية مرتبطة بها. ويمكن عرض اللحظة نفسها بشكل مختلف تبعًا للمنطقة الزمنية.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.Location())
}

UTC والمحلية

تتوفر منطقتان زمنيتان مضمّنتان دائمًا:

  • time.UTC للتوقيت العالمي المنسق.
  • time.Local للمنطقة الزمنية المحلية للجهاز.
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.UTC().Hour())
}

تحميل منطقة زمنية مسماة

تبحث time.LoadLocation(name) عن منطقة زمنية وفق معيار IANA، مثل "Europe/Istanbul" أو "America/New_York".

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, err := time.LoadLocation("UTC")
    fmt.Println(loc, err)
}

تحويل المناطق الزمنية باستخدام In

تعيد t.In(loc) اللحظة نفسها مع عرضها في منطقة زمنية مختلفة. ولا تتغير اللحظة الأساسية، بل طريقة عرضها فقط.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.In(time.UTC).Hour())
}

اللحظة نفسها، وساعات مختلفة

الظهر بالتوقيت العالمي UTC لحظة واحدة، لكن المشاهد في منطقة زمنية أخرى يرى ساعة مختلفة على ساعة الحائط. ويكون الفرق الذي تحسبه Sub بينهما صفرًا.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    u := t.UTC()
    fmt.Println(t.Sub(u))
}

إنشاء وقت في منطقة زمنية

مرّر منطقة زمنية باعتبارها الوسيط الأخير إلى time.Date لإنشاء وقت مباشرةً في تلك المنطقة.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc, _ := time.LoadLocation("UTC")
    t := time.Date(2026, 5, 30, 9, 0, 0, 0, loc)
    fmt.Println(t.Hour())
}

قراءة إزاحة المنطقة الزمنية

تعيد t.Zone() الاختصار الخاص بالمنطقة الزمنية وإزاحتها عن UTC بالثواني.

package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    name, offset := t.Zone()
    fmt.Println(name, offset)
}

المناطق الزمنية الثابتة

عندما لا تحتاج إلى قواعد IANA الكاملة، تنشئ time.FixedZone(name, offsetSeconds) منطقة زمنية بسيطة بإزاحة ثابتة.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("GMT+3", 3*3600)
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, loc)
    name, off := t.Zone()
    fmt.Println(name, off)
}

التنسيق عبر المناطق الزمنية

حوّل باستخدام In قبل التنسيق لعرض طابع زمني في منطقة القارئ الزمنية.

package main

import (
    "fmt"
    "time"
)

func main() {
    loc := time.FixedZone("GMT+3", 3*3600)
    t := time.Date(2026, 5, 30, 12, 0, 0, 0, time.UTC)
    fmt.Println(t.In(loc).Format("15:04 MST"))
}

خزّن بالتوقيت العالمي واعرض بالتوقيت المحلي

قاعدة شائعة الاستخدام: خزّن البيانات وأجرِ العمليات الحسابية بالتوقيت العالمي UTC، وحوّلها إلى منطقة زمنية محلية فقط عند عرض الأوقات للمستخدمين. فهذا يتجنب الغموض.

package main

import (
    "fmt"
    "time"
)

func main() {
    stored := time.Date(2026, 5, 30, 9, 0, 0, 0, time.UTC)
    loc := time.FixedZone("GMT+2", 2*3600)
    fmt.Println("shown:", stored.In(loc).Hour())
}

معالجة أخطاء التحميل

قد تفشل LoadLocation إذا كانت قاعدة بيانات المناطق الزمنية مفقودة أو كان الاسم غير معروف. احرص دائمًا على التحقق من الخطأ.

package main

import (
    "fmt"
    "time"
)

func main() {
    _, err := time.LoadLocation("Mars/Olympus")
    if err != nil {
        fmt.Println("unknown zone")
    }
}

تحقق سريع

ما الذي تغيّره t.In(loc)؟

مراجعة: المناطق الزمنية

لقد تعلمت كيفية التعامل مع المناطق الزمنية:

  • لكل وقت منطقة زمنية، ويتوفر UTC وLocal بشكل مضمّن.
  • حمّل المناطق الزمنية المسماة باستخدام LoadLocation، أو أنشئ الإزاحات باستخدام FixedZone.
  • حوّل باستخدام In، وخزّن بالتوقيت العالمي واعرض بالتوقيت المحلي.
package main

import (
    "fmt"
    "time"
)

func main() {
    t := time.Date(2026, 5, 30, 15, 0, 0, 0, time.UTC)
    loc := time.FixedZone("GMT-5", -5*3600)
    fmt.Println(t.In(loc).Format("15:04 MST"))
}
البدء مجانًا

تعلم Go مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
51
الدروس
203

الأسئلة الشائعة

هل درس «المناطق الزمنية» مجاني؟

نعم — نص درس «المناطق الزمنية» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «المناطق الزمنية»؟

تعامَل مع المواقع الجغرافية تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «المناطق الزمنية»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. الوقت والمدة
  2. التنسيق والتحليل
  3. المؤقتات وTickers
  4. المناطق الزمنية
← العودة إلى Go Academy