0Pricing
Python Academy · درس

المناطق الزمنية باستخدام zoneinfo

تعامَل مع كائنات datetime المزوّدة بالمنطقة الزمنية

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

كائنات datetime الساذجة والمدركة للمنطقة الزمنية

لا يحتوي كائن datetime الساذج على معلومات المنطقة الزمنية؛ فهو يقول فقط «الساعة 2 مساءً» من دون تحديد أي ساعة 2 مساءً. أما كائن datetime المدرك للمنطقة الزمنية فيحمل منطقة زمنية، ولذلك يحدد لحظة زمنية دقيقة في أي مكان حول العالم.

تمنع كائنات datetime المدركة للمنطقة الزمنية الأخطاء عندما يمتد المستخدمون عبر مناطق متعددة.

from datetime import datetime
naive = datetime(2026, 5, 30, 14, 0)
print(naive.tzinfo)

استيراد zoneinfo

تأتي zoneinfo ضمن المكتبة القياسية في Python 3.9 والإصدارات الأحدث. استورد ZoneInfo ومرّر اسماً لمنطقة زمنية وفق IANA، مثل 'Europe/Istanbul' أو 'America/New_York'.

from zoneinfo import ZoneInfo
tz = ZoneInfo('Europe/Istanbul')
print(tz)

إنشاء كائن datetime مدرك للمنطقة الزمنية

مرّر tzinfo=ZoneInfo(...) عند إنشاء كائن datetime لجعله مدركاً للمنطقة الزمنية. عندها يعرف الكائن المنطقة التي ينتمي إليها بدقة.

from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d)
print(d.tzinfo)

UTC كنقطة مرجعية

يُعد UTC المرجع العالمي. استخدم datetime.now(ZoneInfo('UTC')) للحصول على الوقت الحالي وفق UTC مع معلومات المنطقة الزمنية. يُعد تخزين الأوقات وفق UTC أفضل ممارسة.

from datetime import datetime
from zoneinfo import ZoneInfo
utc_now = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
print(utc_now)

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

يحوّل .astimezone(tz) كائن datetime مدركاً للمنطقة الزمنية إلى منطقة زمنية أخرى، ويعدّل وقت الساعة بحيث يظل يشير إلى اللحظة نفسها.

from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ist = utc.astimezone(ZoneInfo('Europe/Istanbul'))
print('UTC:', utc)
print('Istanbul:', ist)

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

بعد التحويل، تختلف أرقام الساعة المحلية، لكن اللحظة الأساسية تظل نفسها. تقارن عملية مقارنة كائنَي datetime المدركين للمنطقة الزمنية اللحظات الفعلية، لا الأرقام المعروضة.

from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 11, 0, tzinfo=ZoneInfo('UTC'))
ny = utc.astimezone(ZoneInfo('America/New_York'))
print(utc == ny)

قراءة الإزاحة عن UTC

تُرجع الطريقة .utcoffset() قيمة timedelta توضّح بُعد المنطقة الزمنية عن UTC في تلك اللحظة، بما في ذلك أي تعديل ناتج عن التوقيت الصيفي.

from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print('Offset:', d.utcoffset())

التعامل مع التوقيت الصيفي تلقائياً

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

from datetime import datetime
from zoneinfo import ZoneInfo
winter = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
summer = datetime(2026, 7, 15, 12, 0, tzinfo=ZoneInfo('America/New_York'))
print('Winter:', winter.utcoffset())
print('Summer:', summer.utcoffset())

إسناد منطقة زمنية إلى وقت ساذج

إذا كان كائن datetime الساذج يمثّل وقتاً محلياً معروفاً، فألحق به منطقة زمنية باستخدام .replace(tzinfo=...). فهذا يضيف وصف المنطقة إليه من دون تغيير وقت الساعة.

from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = naive.replace(tzinfo=ZoneInfo('Europe/Istanbul'))
print(aware)

تجنّب خلط الكائنات الساذجة والمدركة

لا يمكنك طرح كائن datetime ساذج من كائن مدرك للمنطقة الزمنية أو مقارنته به؛ إذ ترفع Python استثناء TypeError. حافظ على اتساق كائنات datetime في البرنامج بأكمله.

from datetime import datetime
from zoneinfo import ZoneInfo
naive = datetime(2026, 5, 30, 9, 0)
aware = datetime(2026, 5, 30, 9, 0, tzinfo=ZoneInfo('UTC'))
try:
    print(aware - naive)
except TypeError as e:
    print('Error:', e)

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

يطبع الرمز %Z اسم المنطقة الزمنية، بينما يطبع %z الإزاحة الرقمية عند تنسيق كائن datetime مدرك للمنطقة الزمنية.

from datetime import datetime
from zoneinfo import ZoneInfo
d = datetime(2026, 5, 30, 14, 0, tzinfo=ZoneInfo('Europe/Istanbul'))
print(d.strftime('%Y-%m-%d %H:%M %Z %z'))

تحقق سريع

ما الفرق الأساسي بين كائنَي datetime الساذج والمدرك للمنطقة الزمنية؟

مراجعة: المناطق الزمنية باستخدام zoneinfo

ملخص:

  • تفتقر كائنات datetime الساذجة إلى معلومات المنطقة الزمنية، بينما تحمل الكائنات المدركة السمة tzinfo.
  • استخدم ZoneInfo('Region/City') من الوحدة zoneinfo.
  • يحوّل .astimezone() كائن datetime مدركاً للمنطقة الزمنية إلى منطقة أخرى.
  • تتعامل zoneinfo مع التوقيت الصيفي تلقائياً، ويجب ألا تخلط بين كائنات datetime الساذجة والمدركة للمنطقة الزمنية.
from datetime import datetime
from zoneinfo import ZoneInfo
utc = datetime(2026, 5, 30, 12, 0, tzinfo=ZoneInfo('UTC'))
print(utc.astimezone(ZoneInfo('Europe/Istanbul')))

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

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

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

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

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

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

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

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

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

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

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

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

  1. date وtime وdatetime
  2. Timedelta والعمليات الحسابية
  3. التنسيق والتحليل
  4. المناطق الزمنية باستخدام zoneinfo
← العودة إلى Python Academy