AzLearn

datetime و time

datetime & time

مفهوم ~18 دقيقة

datetime و time — التواريخ والأوقات في Python

كل تطبيق حقيقي يتعامل مع الوقت — سجلات التحويلات المالية، مواعيد الحجوزات، فواتير التاريخ، تقارير يومية أو شهرية. Python توفر وحدة datetime في مكتبتها المعيارية تحل هذه المشكلة بشكل كامل ودون الحاجة لأي مكتبة خارجية.

وحدة datetime تحتوي على عدة كلاسات رئيسية:

الكلاسما يمثّله
dateتاريخ فقط (سنة، شهر، يوم)
timeوقت فقط (ساعة، دقيقة، ثانية)
datetimeتاريخ + وقت معاً
timedeltaفرق زمني (مدة)
timezoneمنطقة زمنية

إنشاء كائنات datetime

الطريقة الأكثر استخداماً هي datetime.now() للحصول على اللحظة الحالية، وdatetime(year, month, day) لإنشاء تاريخ محدد:

main.go

الحساب الزمني مع timedelta

timedelta هو ما يجعل datetime قوياً حقاً — يمكنك جمع الأوقات وطرحها بكل سهولة. تخيّل أنك تريد معرفة تاريخ انتهاء اشتراك بعد 30 يوماً من اليوم، أو كم مضى على تاريخ معين:

main.go

تنسيق التواريخ — strftime

strftime (string format time) تحوّل كائن datetime إلى نص منسّق بالشكل الذي تريده. الاسم يُقرأ: “string format time”.

رموز التنسيق الأساسية:

الرمزالمعنىمثال
%Yالسنة كاملة2024
%mالشهر بأرقام03
%dاليوم بأرقام15
%Hالساعة (24)14
%Mالدقائق30
%Sالثواني05
%Aاسم اليومMonday
%Bاسم الشهرMarch
main.go

تحليل النصوص — strptime

العملية العكسية: تحويل نص يمثّل تاريخاً إلى كائن datetime. strptime (string parse time) تحتاج أن تخبرها بتنسيق النص المُدخل:

main.go

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

التعامل الأساسي مع المناطق الزمنية بدون مكتبات خارجية. UTC هو المنطقة الزمنية العالمية المرجعية، والسعودية تبعد +3 ساعات عنها:

main.go

أنماط استخدام datetime في الواقع

في المشاريع الحقيقية، datetime يظهر في سياقات محددة ومتكررة. إليك الأنماط التي ستحتاجها أكثر من غيرها:

1. تسجيل وقت الحدث (Timestamping)

from datetime import datetime, timezone
حدث = {"نوع": "تسجيل_دخول", "وقت": datetime.now(timezone.utc).isoformat()}

2. التحقق من انتهاء الصلاحية (Expiry Check)

from datetime import datetime, timedelta
انتهاء_الرمز = datetime.now() + timedelta(hours=1)
if datetime.now() > انتهاء_الرمز:
    raise ValueError("انتهت صلاحية الرمز")

3. فلترة السجلات حسب نطاق زمني (Date Range Filtering)

from datetime import datetime, timedelta
آخر_ساعة = datetime.now() - timedelta(hours=1)
سجلات_الساعة =for س in السجلات if س["وقت"] >= آخر_ساعة]

4. تنسيق واجهة المستخدم (UI Formatting)

from datetime import datetime
تاريخ = datetime(2024, 3, 15)
print(تاريخ.strftime("%d %B %Y"))  # 15 March 2024

هذه الأنماط الأربعة تغطي 90% من احتياجاتك اليومية مع datetime. ستراها مجتمعة في الدرس التطبيقي (py-08-04) حين نبني محلل السجلات.

خلاصة سريعة

  • datetime.now() ← الوقت الحالي
  • datetime(y, m, d) ← تاريخ محدد
  • timedelta(days=N) ← فرق زمني، يُضاف أو يُطرح
  • dt.strftime("%Y-%m-%d") ← كائن → نص
  • datetime.strptime(نص, تنسيق) ← نص → كائن
  • timezone.utc و timezone(timedelta(hours=3)) ← إدارة المناطق الزمنية
تحدي — Challenge