تعتبر المناطق الزمنية ضرورية لأي تطبيق يتعامل مع التواريخ والأوقات. بالطبع ، هذا ينطبق بشكل خاص على التطبيقات التي تخدم المستخدمين عبر القارات والمواقع. تحدد المناطق الزمنية الإزاحة من التوقيت العالمي (UTC) لمواقع محددة حول العالم. يلعبون دورًا حيويًا في ضمان معالجة الوقت بشكل دقيق وموثوق.
يوفر Go حزمة الوقت في مكتبته القياسية للعمل مع مناطق الوقت والوقت. يمكنك جلب وتحويل المناطق الزمنية في مواقع مختلفة باستخدام الحزمة الزمنية.
حزمة الوقت
ال وقت توفر الحزمة وظائف لـ العمل مع الأوقات والتواريخوقياس الوقت وعرضه والتعامل مع التواريخ باستخدام التقويم الميلادي دون الثواني الكبيسة.
توفر الحزمة الزمنية ملف وقتنوع الهيكل تحتوي على حقل الموقع الذي يمكنك استخدامه لتعيين المناطق الزمنية.
يمكنك استيراد حزمة الوقت مع بيان الاستيراد.
يستورد"وقت"
إليك نوع هيكل الوقت وحقوله. الحقول غير مُصدرة ، لذا فهي غائبة عن الوثائق الرسمية.
طَرد رئيسي
يكتب وقت هيكل {
// الحائط هو وقت الحائط بالتنسيق الذي تم إرجاعه بواسطة runtime.
// وظيفة.
حائط uint64// ext هي قراءة الساعة الرتيبة بالتنسيق الذي تم إرجاعه بواسطة
// runtime.nanotime ().
تحويلة int64// loc هو مؤشر إلى بنية الموقع المرتبطة بهذا الوقت.
loc * الموقع
}يكتب موقع هيكل {
// name هو اسم المنطقة الزمنية ، مثل "UTC" أو "PST".
اسم خيط// تحتوي المنطقة على معلومات حول اختصار المنطقة الزمنية ، الإزاحة ،
// وحكم لمنطقة زمنية واحدة في الموقع.
المنطقة [] المنطقة// tx يحتوي على معلومات حول وقت اختصار المنطقة الزمنية أو
// تعويض التغييرات لموقع.
tx [] zoneTrans// extension يحتوي على اسم المنطقة الزمنية الأصل إذا كان هذا الموقع
// يمتد من واحد آخر.
يمتد خيط// cacheStart و cacheEnd هما طوابع زمنية لـ Unix تحدد النطاق
// التي يكون حقل cacheZone صالحًا لها.
ذاكرة التخزين المؤقت int64
ذاكرة التخزين المؤقت int64
// cacheZone يشير إلى المنطقة الصالحة حاليًا للوقت
// النطاق المحدد بواسطة cacheStart و cacheEnd.
cacheZone * المنطقة
}
تستخدم العديد من الطرق الوقت و موقع الهياكل ، بما في ذلك طرق المنطقة الزمنية.
تحميل معلومات المنطقة الزمنية
يعد تحميل معلومات المنطقة الزمنية إحدى العمليات الأساسية عند العمل مع المناطق الزمنية. ال موقع التحميل يوفر الأسلوب وظائف لتحميل معلومات المنطقة الزمنية من قاعدة بيانات المنطقة الزمنية IANA. ال موقع التحميل يأخذ الأسلوب في اسم المنطقة الزمنية ويعيد معلومات الموقع وخطأ في المعالجة. بمجرد تحميل معلومات المنطقة الزمنية ، يقوم بإنشاء ملف وقت مثيل البنية المرتبط بالمنطقة الزمنية.
يستورد (
"FMT"
"وقت"
)funcرئيسي() {
// قم بتحميل موقع المنطقة الزمنية لأمريكا / نيويورك
loc ، يخطئ: = الوقت. LoadLocation ("أمريكا / نيويورك")لو يخطئ! لا شيء {
FMT. Println ("خطأ في تحميل الموقع:"، يخطئ)
يعود
}
// احصل على الوقت الحالي في الموقع
الآن: = الوقت. الآن (). في (loc)
FMT. Println ("الوقت الحالي في نيويورك:"، الآن)
}
ال في طريقة الآن تأخذ الوظيفة موقعًا وتطبع الوقت هناك:
بالإضافة إلى ذلك ، يمكنك استخدام ملف المنطقة الثابتة طريقة لتحميل الوقت الحالي في موقع ما إذا كنت تعرف سلسلة الموقع وإزاحة المنطقة الزمنية من التوقيت العالمي المنسق (UTC). أولاً ، ستحتاج إلى تحميل الوقت الحالي بالتوقيت العالمي المنسق ، ثم ستستخدم طريقة المنطقة الثابتة لتحميل الموقع على أساس السلسلة والإزاحة قبل تمرير الموقع إلى طريقة الوقت مثال.
يستورد (
"FMT"
"وقت"
)funcرئيسي() {
// احصل على الوقت الحالي بالتوقيت العالمي المنسق
الآن: = الوقت. الآن (). UTC ()// تعيين المنطقة الزمنية لاغوس
لاغوس: = الآن. في (الوقت. المنطقة الثابتة ("وات", 3600))
// اطبع الوقت الحالي في كلا الموقعين
FMT. Println ("الوقت الحالي في لاغوس:"، لاغوس)
}
ال رئيسي وظيفة تطبع الوقت الحالي في لاغوس إلى وحدة التحكم.
قياس مدة المنطقة الزمنية
توفر الحزمة الزمنية منطقة طريقة لاسترداد اختصار وإزاحة المنطقة الزمنية المرتبطة بـ وقت. وقت قيمة. تعرض طريقة المنطقة السلسلة التي تمثل اختصار المنطقة الزمنية (على سبيل المثال ، "EST" لـ "America / New_York") وعددًا صحيحًا يمثل عدد الثواني شرق التوقيت العالمي المنسق (UTC).
يستورد (
"FMT"
"وقت"
)funcرئيسي() {
// قم بتحميل موقع المنطقة الزمنية لأمريكا / نيويورك
loc ، يخطئ: = الوقت. LoadLocation ("أمريكا / نيويورك")لو يخطئ! لا شيء {
FMT. Println ("خطأ في تحميل الموقع:"، يخطئ)
يعود
}// احصل على الوقت الحالي بالتوقيت العالمي المنسق والموقع المحدد
t1: = الوقت. الآن()
t2: = t1.In (loc)// احصل على الإزاحة بالثواني لكل منطقة زمنية
// للمناطق الزمنية
_، offset1: = t1.Zone ()
_، offset2: = t2.Zone ()// احسب مدة تحول المنطقة الزمنية
// بين UTC و America / New_York
المدة: = offset2 - offset1
FMT. برنتف ("مدة إزاحة المنطقة الزمنية" +
"بين التوقيت العالمي المنسق ونيويورك:٪ d ثانية"، مدة)
}
في الوظيفة الرئيسية ، تقيس طريقة المنطقة مدة تحول المنطقة الزمنية بين منطقتين زمنيتين (الوقت. قيم الوقت). ال t1 المتغير هو الوقت الحالي بالتوقيت العالمي المنسق ، و T2 المتغير هو الوقت الحالي في المنطقة الزمنية "America / New_York".
تقوم الوظيفة بطباعة ملف مدة متغير (الفرق في الإزاحة بين المناطق الزمنية) يمثل تحول المنطقة الزمنية بالثواني.
تقييم الوقت بين المناطق الزمنية
يمكنك تقييم الوقت بين المناطق الزمنية إذا كنت تعرف المدة بين المناطق الزمنية. يمكنك استخدام ال يضيف طريقة في أسلوب وقتك. مثيل بنية الوقت لإضافة مدة إلى الوقت في منطقة زمنية.
يستورد (
"سجل"
"وقت"// استيراد حزمة الوقت
)funcتقييم الوقت(ر الوقت. الوقت ، المدة الزمنية. مدة)وقت.وقت {
// تحميل الموقع لأفريقيا / لاغوس
الموقع ، يخطئ: = الوقت. LoadLocation ("أفريقيا / لاغوس")
لو يخطئ! لا شيء {
سجل. Println ("حدث خطأ أثناء تحميل الموقع")
}
يعود ر. في (الموقع]. إضافة (المدة)
}
ال تقييم الوقت تستغرق الوظيفة وقتًا. مثيل الوقت ومدة النوع وقت. مدة، وإرجاع الوقت في المنطقة الزمنية. يقوم بتحميل الوقت الحالي في "Africa / Lagos" ويضيف مدة إلى الوقت.
معالجة الوقت والتاريخ باستخدام حزمة الوقت
تعد حزمة الوقت متعددة الاستخدامات للغاية للعمل مع الأوقات والتواريخ. توفر الحزمة الزمنية وظائف مثل Unix () لتحويل الوقت إلى وقت Unix ، و Sleep () لإيقاف goroutines مؤقتًا ، و Format () لتنسيق قيم الوقت إلى سلسلة.