datetime و time
datetime & time
datetime و time — التواريخ والأوقات في Python
كل تطبيق حقيقي يتعامل مع الوقت — سجلات التحويلات المالية، مواعيد الحجوزات، فواتير التاريخ، تقارير يومية أو شهرية. Python توفر وحدة datetime في مكتبتها المعيارية تحل هذه المشكلة بشكل كامل ودون الحاجة لأي مكتبة خارجية.
وحدة datetime تحتوي على عدة كلاسات رئيسية:
| الكلاس | ما يمثّله |
|---|---|
date | تاريخ فقط (سنة، شهر، يوم) |
time | وقت فقط (ساعة، دقيقة، ثانية) |
datetime | تاريخ + وقت معاً |
timedelta | فرق زمني (مدة) |
timezone | منطقة زمنية |
إنشاء كائنات datetime
الطريقة الأكثر استخداماً هي datetime.now() للحصول على اللحظة الحالية، وdatetime(year, month, day) لإنشاء تاريخ محدد:
الحساب الزمني مع timedelta
timedelta هو ما يجعل datetime قوياً حقاً — يمكنك جمع الأوقات وطرحها بكل سهولة. تخيّل أنك تريد معرفة تاريخ انتهاء اشتراك بعد 30 يوماً من اليوم، أو كم مضى على تاريخ معين:
تنسيق التواريخ — 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 |
تحليل النصوص — strptime
العملية العكسية: تحويل نص يمثّل تاريخاً إلى كائن datetime. strptime (string parse time) تحتاج أن تخبرها بتنسيق النص المُدخل:
المناطق الزمنية — timezone
التعامل الأساسي مع المناطق الزمنية بدون مكتبات خارجية. UTC هو المنطقة الزمنية العالمية المرجعية، والسعودية تبعد +3 ساعات عنها:
أنماط استخدام 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))← إدارة المناطق الزمنية