الانتقال إلى المحتوى الرئيسي
الوحدة 8 · الدرس 2 من 430/36 في الدورة~12 min
دروس الوحدة (2/4)

التاريخ والوقت: التواريخ والأوقات

توفر الوحدة datetime الفئات لتمثيل التواريخ والأوقات.

الفئات الثلاث الرئيسية

  • date — التاريخ فقط (السنة، الشهر، اليوم)
  • time — الوقت فقط (ساعة، دقيقة، ثانية، ميكروثانية)
  • datetime — التاريخ + الوقت معًا
  • timedelta — المدة (الفرق بين اللحظتين)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

"الآن": now وtoday

Python
datetime.now()        # current date + time
date.today()          # current date only

الحساب مع timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedelta يقبل days، seconds، microseconds، milliseconds، minutes، hours، weeks (ليس months أو years، وهي غامضة).

التنسيق: strftime

يحول التاريخ والوقت → السلسلة وفقًا للنمط.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

التوجيهات الأكثر استخدامًا: %Y سنة مكونة من 4 أرقام، %m شهر مكون من رقمين، %d يوم مكون من رقمين، %H 24 ساعة، %M دقيقة، %S ثانية.

التحليل: strptime

العكس: سلسلة → وقت التاريخ، بالنظر إلى النمط المتوقع.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ايزو 8601

لتبادل البيانات، يفضل دائمًا تنسيق ISO 8601 (YYYY-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

المناطق الزمنية وأوقات التاريخ على علم

بشكل افتراضي، كائنات datetime في Python ساذجة (أي أنها لا تحتوي على معلومات المنطقة الزمنية). بالنسبة للتطبيقات الواقعية، من الأفضل جعلها مدركة عن طريق تعيين معلومات المنطقة الزمنية عبر datetime.timezone.utc أو استخدام الوحدة zoneinfo.

جربه

تمرين#python.m8.l2.e1
المحاولات: 0جارٍ التحميل…

احسب التاريخ بعد 30 يومًا من 1 يناير 2025 وقم بتنسيقه بالشكل "YYYY-MM-DD" في المتغير "date_str". تقييم "date_str".

جارٍ تحميل المحرر…
إظهار التلميح

قاعدة + دلتا الوقت (الأيام = 30)، ثم .سترفتايم

الحل متاح بعد 3 من المحاولات

تمرين المراجعة

تمرين#python.m8.l2.e2
المحاولات: 0جارٍ التحميل…

بالنظر إلى السلسلة s = '15/03/2025''، قم بتحليلها باستخدام strptime في المتغير `d` (كائن التاريخ والوقت). قم بتقييم عدد صحيح من أيام الأسبوع `d.weekday()` (0=Mon، 6=Sun).

جارٍ تحميل المحرر…
إظهار التلميح

strptime بنمط التنسيق الإيطالي.

الحل متاح بعد 3 من المحاولات

التحدي الإضافي

تمرين#python.m8.l2.e3
المحاولات: 0جارٍ التحميل…

Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.

جارٍ تحميل المحرر…
إظهار التلميح

The difference between two dates returns a timedelta. Access the integer days with delta.days.

الحل متاح بعد 3 من المحاولات