📅 التعامل مع التواريخ والوقت في بايثون: دليل شامل للمبتدئين
مرحباً بك في عالم التواريخ والوقت في بايثون! 🕐 في عالم البرمجة، غالباً ما نحتاج إلى التعامل مع البيانات الزمنية، مثل تسجيل وقت إنشاء ملف، حساب عمر المستخدم، أو جدولة المهام. في هذا الدرس، سنتعلم كيفية التعامل مع التواريخ والوقت بسهولة باستخدام المكتبة القياسية datetime في بايثون.
🔧 استيراد مكتبة datetime
قبل أن نبدأ، نحتاج إلى استيراد المكتبة التي تحتوي على الأدوات التي سنستخدمها. المكتبة تسمى datetime، وهي جزء من المكتبات القياسية في بايثون، مما يعني أنها مثبتة مسبقاً ولا تحتاج إلى تثبيت إضافي.
# استيراد المكتبة بأكملها
import datetime
# أو استيراد الفئات التي نحتاجها مباشرة (الطريقة المفضلة)
from datetime import datetime, date, time, timedelta
في الأمثلة القادمة، سنفترض أننا استخدمنا الطريقة الثانية (from datetime import ...) لأنها تجعل الكود أكثر نظافة ووضوحاً.
📝 إنشاء كائنات التاريخ والوقت
المكتبة datetime توفر لنا عدة فئات (classes) للتعامل مع أنواع مختلفة من البيانات الزمنية. دعنا نتعرف على الأساسيات:
1. التاريخ فقط (date):
from datetime import date
# إنشاء تاريخ محدد (سنة، شهر، يوم)
my_birthday = date(1995, 8, 15)
print(my_birthday) # سيطبع: 1995-08-15
# الحصول على تاريخ اليوم
today = date.today()
print("تاريخ اليوم هو:", today)
2. الوقت فقط (time):
from datetime import time
# إنشاء وقت محدد (ساعة، دقيقة، ثانية)
meeting_time = time(14, 30, 0) # الساعة 2:30 مساءً
print(meeting_time) # سيطبع: 14:30:00
lunch_time = time(12, 0) # يمكن حذف الثواني
print(lunch_time) # سيطبع: 12:00:00
3. التاريخ والوقت معاً (datetime): هذه هي الفئة الأكثر استخداماً، حيث تجمع بين التاريخ والوقت في كائن واحد.
from datetime import datetime
# إنشاء تاريخ ووقت محددين
event_start = datetime(2023, 10, 5, 9, 0, 0) # (سنة، شهر، يوم، ساعة، دقيقة، ثانية)
print(event_start) # سيطبع: 2023-10-05 09:00:00
# الحصول على التاريخ والوقت الحاليين
now = datetime.now()
print("التاريخ والوقت الحاليان:", now)
🎨 تنسيق وعرض التواريخ (strftime)
التنسيق الافتراضي للتاريخ (YYYY-MM-DD) قد لا يناسب كل الحالات. لحسن الحظ، يمكننا استخدام الدالة strftime() لتنسيق التاريخ والوقت بأي طريقة نريدها.
from datetime import datetime
now = datetime.now()
# تنسيق التاريخ
print(now.strftime("%Y/%m/%d")) # 2023/10/05
print(now.strftime("%d-%m-%Y")) # 05-10-2023
print(now.strftime("%A, %d %B %Y")) # Thursday, 05 October 2023 (سيظهر باللغة الإنجليزية)
# تنسيق الوقت
print(now.strftime("%H:%M:%S")) # 14:30:45 (تنسيق 24 ساعة)
print(now.strftime("%I:%M %p")) # 02:30 PM (تنسيق 12 ساعة مع AM/PM)
# تنسيق مشترك
full_format = now.strftime("اليوم هو %A %d %B %Y، والساعة %I:%M %p")
print(full_format)
رموز التنسيق الشائعة:
%Y: السنة بأربع أرقام (مثل 2023)%y: السنة برقمين (مثل 23)%m: الشهر برقمين (01 إلى 12)%B: اسم الشهر كاملاً (بالإنجليزية)%b: اسم الشهر المختصر (بالإنجليزية)%d: اليوم من الشهر (01 إلى 31)%A: اسم اليوم كاملاً (بالإنجليزية)%H: الساعة (00 إلى 23)%I: الساعة (01 إلى 12)%M: الدقيقة (00 إلى 59)%S: الثانية (00 إلى 59)%p: AM أو PM
🔄 تحويل النص إلى تاريخ (strptime)
ماذا لو كان لدينا تاريخ على شكل نص (string) وأردنا تحويله إلى كائن datetime للتعامل معه برمجياً؟ هنا تأتي دالة strptime() للإنقاذ!
from datetime import datetime
# لدينا تاريخ على شكل نص
date_string = "25-12-2023 20:30"
# نحوله إلى كائن datetime
# يجب أن نحدد التنسيق المطابق للنص الأصلي
christmas_eve = datetime.strptime(date_string, "%d-%m-%Y %H:%M")
print(christmas_eve) # سيطبع ككائن datetime: 2023-12-25 20:30:00
# الآن يمكننا التعامل معه كأي كائن datetime آخر
print("اليوم هو:", christmas_eve.strftime("%A"))
➕➖ العمليات الحسابية على التواريخ (timedelta)
أحد أكثر الأشياء المفيدة في التعامل مع التواريخ هو القدرة على إجراء عمليات حسابية عليها، مثل إضافة أيام أو حساب الفرق بين تاريخين.
from datetime import datetime, timedelta
today = datetime.now()
print("اليوم:", today.strftime("%Y-%m-%d"))
# إضافة 7 أيام (أسبوع واحد)
next_week = today + timedelta(days=7)
print("بعد أسبوع:", next_week.strftime("%Y-%m-%d"))
# طرح 3 أيام
three_days_ago = today - timedelta(days=3)
print("قبل ثلاثة أيام:", three_days_ago.strftime("%Y-%m-%d"))
# إضافة مزيج من الوحدات الزمنية
future_date = today + timedelta(weeks=2, days=3, hours=5)
print("التاريخ المستقبلي:", future_date)
# حساب الفرق بين تاريخين
date1 = datetime(2023, 12, 25)
date2 = datetime(2023, 12, 20)
difference = date1 - date2 # النتيجة ستكون كائن timedelta
print("الفرق بين التاريخين هو:", difference.days, "أيام")
💡 مثال تطبيقي بسيط: حساب عمر الشخص
لنجمع ما تعلمناه في مثال عملي بسيط:
from datetime import date
# تاريخ ميلاد شخص
birth_date = date(2000, 5, 10)
today = date.today()
# حساب العمر بالأيام
age_in_days = (today - birth_date).days
print(f"عمرك بالأيام: {age_in_days} يوم")
# تحويل الأيام إلى سنوات تقريبية
age_in_years = age_in_days // 365 # استخدام القسمة الصحيحة
print(f"عمرك التقريبي: {age_in_years} سنة")
🎯 ملخص الدرس
تعلمنا في هذا الدرس الأساسيات القوية للتعامل مع التواريخ والوقت في بايثون:
- كيفية استيراد واستخدام مكتبة
datetime📦 - إنشاء كائنات
date،time، وdatetime🆕 - تنسيق عرض التواريخ باستخدام
strftime()🎨 - تحويل النصوص إلى تواريخ باستخدام
strptime()🔄 - إجراء العمليات الحسابية باستخدام
timedelta➕➖
تذكر أن الممارسة هي مفتاح الإتقان! جرب إنشاء برنامج بسيط يسجل وقت بداية ونهاية تنفيذ مهمة معينة، ثم يحسب المدة التي استغرقتها.
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال