0Pricing
Ruby Academy · درس

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

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

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

لماذا تهم المناطق الزمنية

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

t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.zone || t.utc_offset)
puts(t.utc_offset)

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

يُعد UTC (التوقيت العالمي المنسق) المرجع العالمي. خزّن البيانات وأجرِ الحسابات باستخدام UTC، ثم حوّلها عند العرض.

t = Time.utc(2026, 5, 30, 9, 0, 0)
puts(t.utc?)
puts(t.hour)

الوقت المحلي

يستخدم Time.now وTime.local المنطقة المحلية للجهاز. ويُعطى الفرق عن UTC، بالثواني، بواسطة utc_offset.

t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.utc_offset)
puts(t.utc_offset / 3600)

التحويل إلى UTC

تعيد getutc (الاسم البديل utc) اللحظة نفسها معبّرًا عنها بتوقيت UTC. يتغير وقت الساعة الظاهر، لكن اللحظة تبقى مطابقة.

t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.hour)
puts(t.getutc.hour)

التحويل إلى إزاحة محلية

تقبل getlocal سلسلة إزاحة صريحة، وتعيد اللحظة معبّرًا عنها في تلك المنطقة.

t = Time.utc(2026, 5, 30, 9, 0, 0)
istanbul = t.getlocal('+03:00')
puts(istanbul.hour)

تحديد الإزاحة عند الإنشاء

مرّر سلسلة إزاحة باعتبارها الوسيط الأخير إلى Time.new لتثبيت المنطقة عند الإنشاء.

ny = Time.new(2026, 5, 30, 8, 0, 0, '-04:00')
puts(ny.utc_offset / 3600)
puts(ny.getutc.hour)

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

يمكن لوقتين في منطقتين مختلفتين أن يمثّلا اللحظة نفسها تمامًا. تعتمد المقارنة على اللحظة الأساسية، ولذلك تكون القيمتان متساويتين.

a = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
b = Time.new(2026, 5, 30, 9, 0, 0, '+00:00')
puts(a == b)

الإزاحات في ISO 8601

تضمّن الطوابع الزمنية بتنسيق ISO 8601 الإزاحة، مثل +03:00 أو Z للدلالة على UTC، مما يجعلها غير ملتبسة بين الأنظمة.

require 'time'
t = Time.new(2026, 5, 30, 12, 0, 0, '+03:00')
puts(t.iso8601)
puts(t.getutc.iso8601)

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

يحترم Time.parse الإزاحة الموجودة في سلسلة الإدخال.

require 'time'
t = Time.parse('2026-05-30T12:00:00+03:00')
puts(t.utc_offset / 3600)
puts(t.getutc.hour)

أفضل ممارسة: تخزين UTC

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

stored = Time.utc(2026, 5, 30, 9, 0, 0)
display = stored.getlocal('+03:00')
puts("UTC #{stored.hour} -> Local #{display.hour}")

تنبيه بشأن التوقيت الصيفي

تتجاهل الإزاحة الثابتة مثل +03:00 التوقيت الصيفي. وللتعامل مع المناطق المسماة التي تتضمن قواعد للتوقيت الصيفي، تحتاج إلى مكتبات مثل gem ‏tzinfo؛ إذ لا يعرف صنف Time الأساسي سوى الإزاحات الثابتة.

t = Time.new(2026, 7, 1, 12, 0, 0, '+02:00')
puts(t.utc_offset / 3600)

اختبار سريع

ما الاستراتيجية الموصى بها للتعامل مع المناطق الزمنية في أحد التطبيقات؟

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

لقد تعلّمت التعامل مع المناطق الزمنية بطريقة صحيحة:

  • UTC هو المرجع العالمي
  • يحوّل getutc وgetlocal الوقت من دون تغيير اللحظة
  • تُحدّد الإزاحات عند الإنشاء أو في سلاسل ISO 8601
  • تتساوى اللحظة نفسها عند مقارنتها في مناطق زمنية مختلفة
  • خزّن UTC واعرض الوقت المحلي؛ فالإزاحات الثابتة تتجاهل التوقيت الصيفي
require 'time'
puts(Time.utc(2026,5,30,9).getlocal('+03:00').hour)

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

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

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

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

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

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

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

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

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

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

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

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

  1. فئات الوقت والتاريخ
  2. التحليل والتنسيق
  3. الحسابات الزمنية
  4. المناطق الزمنية
← العودة إلى Ruby Academy