سنتعرف اليوم على واحدة من أكثر الوحدات أهمية في حياة أي مبرمج بايثون: وحدة datetime. سواء كنت تبني تطبيقاً للمواعيد، أو تحسب العمر، أو تنشئ ملفات بسجلات زمنية، ستجد نفسك تستخدم هذه الوحدة باستمرار. للأسف، كثير من المبتدئين يجدونها مربكة في البداية. لكن لا تقلق! بنهاية هذا الدليل، ستتلاعب بالوقت والتاريخ كما تشاء. ⏳✨
💻 تطبيق فوري: يمكنك تجربة جميع الأكواد مباشرة على محرر بايثون العرب دون الحاجة لتثبيت أي شيء.
🤔 لماذا نحتاج وحدة datetime؟
- طباعة التاريخ والوقت الحاليين.
- حساب عدد الأيام حتى موعد حدث معين.
- تسجيل وقت تنفيذ عملية ما.
- التعامل مع تواريخ بلدان مختلفة (مناطق زمنية).
datetime.import datetime1. الحصول على التاريخ والوقت الحاليين
أسهل طريقة لتبدأ هي أن تسأل بايثون: "كم الساعة الآن؟"
التاريخ الحالي فقط:
import datetimetoday = datetime.date.today()print(today) # e.g., 2026-04-27
الوقت والتاريخ معاً (حتى الميكروثانية):
now = datetime.datetime.now()print(now) # e.g., 2026-04-27 18:45:12.123456
مذهل! لقد حصلت على التاريخ والوقت في سطر واحد. لكن ماذا لو أردت أجزاء محددة فقط؟
print(now.year) # 2026print(now.month) # 4print(now.day) # 27print(now.hour) # 18print(now.minute) # 45print(now.second) # 12
2. إنشاء تاريخ أو وقت محدد
ماذا لو أردت تاريخ ميلادك، وليس التاريخ الحالي؟ استخدم date() أو datetime() مع إدخال القيم يدوياً:
birthday = datetime.date(1995, 8, 15) # سنة, شهر, يومprint(birthday) # 1995-08-15specific_time = datetime.datetime(2026, 4, 27, 14, 30, 0)print(specific_time) # 2026-04-27 14:30:00
انتبه لترتيب المعاملات: سنة, شهر, يوم, ساعة, دقيقة, ثانية, ميكروثانية.
3. تنسيق التاريخ والوقت بشكل جميل (strftime)
الأرقام الخام جيدة، لكن المستخدم يريد شيئاً مقروءاً. هنا يأتي دور strftime() (String Format Time). إنها مثل ترجمة التاريخ إلى أي لغة تريدها.
now = datetime.datetime.now()# تنسيقات شائعة:print(now.strftime("%Y-%m-%d")) # 2026-04-27print(now.strftime("%d/%m/%Y")) # 27/04/2026print(now.strftime("%A, %d %B %Y")) # Monday, 27 April 2026print(now.strftime("%I:%M %p")) # 06:45 PM
جدول بأهم الرموز:
| الرمز | المعنى | مثال |
|---|---|---|
%Y | السنة كاملة | 2026 |
%m | الشهر رقماً | 04 |
%B | اسم الشهر | April |
%d | اليوم رقماً | 27 |
%A | اسم اليوم | Monday |
%H | ساعة (24) | 18 |
%I | ساعة (12) | 06 |
%M | الدقائق | 45 |
%S | الثواني | 12 |
%p | AM/PM | PM |
4. تحويل النص إلى تاريخ (strptime)
تخيل أن المستخدم يدخل تاريخاً كنص (مثل "15-08-1995") وأنت تريد تحويله إلى كائن تاريخ حقيقي. استخدم strptime() (String Parse Time):
date_string = "15-08-1995"birthday = datetime.datetime.strptime(date_string, "%d-%m-%Y")print(birthday) # 1995-08-15 00:00:00print(type(birthday)) # <class 'datetime.datetime'>
هنا تخبر بايثون: "النص الذي أعطيتك إياه مكتوب بهذا الترتيب (يوم-شهر-سنة)، حوله إلى تاريخ من فضلك." 🎩
5. المدة الزمنية (timedelta) – السفر عبر الزمن
كيف تحسب عمرك بالأيام؟ أو عدد الأيام حتى رمضان القادم؟ تحتاج إلى timedelta، وهي تمثل فرقاً بين تاريخين.
from datetime import datetime, timedeltatoday = datetime.now()birthday = datetime(1995, 8, 15)age = today - birthdayprint(age) # 11000 days, 5:30:12.123... (مثال)print(age.days) # عدد الأيام فقط# إضافة أو طرح وقتone_week_later = today + timedelta(weeks=1)yesterday = today - timedelta(days=1)print(yesterday.strftime("%Y-%m-%d"))
يمكنك تمرير days, seconds, minutes, hours, weeks إلى timedelta. إنها أداتك للسفر عبر الزمن! 🔮
6. التعامل مع المناطق الزمنية (Timezone)
بشكل افتراضي، كائنات datetime تكون "naive" (غير مدركة للمنطقة الزمنية). للتعامل مع فروق التوقيت، تحتاج إلى وحدة zoneinfo (متوفرة في بايثون 3.9+).
from datetime import datetimefrom zoneinfo import ZoneInfo# توقيت الرياضriyadh_time = datetime.now(ZoneInfo("Asia/Riyadh"))print(riyadh_time)# توقيت نيويوركny_time = datetime.now(ZoneInfo("America/New_York"))print(ny_time)# تحويل توقيتprint(riyadh_time.astimezone(ZoneInfo("America/New_York")))
هذا ينقذك في تطبيقات العالم الحقيقي حيث المستخدمون موزعون حول الكرة الأرضية. 🌍
🧪 جرّب بنفسك: مشروع صغير – عدّاد تنازلي
انسخ هذا الكود في محرر بايثون العرب واستمتع:
from datetime import datetime, timedelta# العد التنازلي لرأس السنة 2027new_year = daََtetime(2027, 1, 1)now = datetime.now()remaining = new_year - nowprint("🎆 العد التنازلي لرأس السنة 2027:")َكلما شغّلته، ترى الأيام تقترب!
🎁 خلاصة: أنت الآن سيد الزمن في بايثون
datetime، يمكنك:- الحصول على الوقت الحالي والتاريخ.
- إنشاء تواريخ محددة.
- تنسيق التواريخ بأي طريقة تخطر ببالك.
- حساب الفروقات الزمنية بذكاء.
- التعامل مع مناطق زمنية مختلفة.
