التعامل مع التواريخ في datetime بايثون

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

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

أساسيات التعامل مع مكتبة datetime

الاستيراد والفئات الأساسية

مكتبة datetime مضمنة في المكتبة القياسية لـ Python ولا تتطلب تثبيتًا إضافيًا:

import datetime
from datetime import date, time, datetime, timedelta, timezone

الفئات الأساسية للمكتبة:

  • datetime.date — التعامل مع التواريخ (السنة، الشهر، اليوم)
  • datetime.time — التعامل مع الوقت (الساعات، الدقائق، الثواني)
  • datetime.datetime — يجمع بين التاريخ والوقت
  • datetime.timedelta — يمثل الفرق بين التواريخ/الأوقات
  • datetime.timezone — التعامل مع المناطق الزمنية

الحصول على التاريخ والوقت الحاليين

from datetime import datetime, date

# التاريخ والوقت الحاليان
now = datetime.now()
print(f"التاريخ والوقت الحاليان: {now}")

# التاريخ الحالي فقط
today = date.today()
print(f"تاريخ اليوم: {today}")

إنشاء التواريخ والتعامل معها

إنشاء التواريخ يدويًا

from datetime import date, datetime

# إنشاء تاريخ محدد
custom_date = date(2025, 5, 9)
print(f"التاريخ المحدد: {custom_date}")

# إنشاء تاريخ ووقت
custom_datetime = datetime(2025, 5, 9, 14, 30, 45)
print(f"التاريخ والوقت المحددان: {custom_datetime}")

استخراج مكونات التاريخ

today = date.today()
print(f"السنة: {today.year}")
print(f"الشهر: {today.month}")
print(f"اليوم: {today.day}")
print(f"يوم الأسبوع: {today.weekday()}")  # 0 = الاثنين، 6 = الأحد

التعامل مع الوقت

إنشاء كائنات الوقت والتعامل معها

from datetime import time

# إنشاء وقت
custom_time = time(14, 30, 45)
print(f"الوقت المحدد: {custom_time}")

# استخراج مكونات الوقت
print(f"الساعات: {custom_time.hour}")
print(f"الدقائق: {custom_time.minute}")
print(f"الثواني: {custom_time.second}")

الحصول على الوقت مع الميكروثواني

from datetime import datetime

now = datetime.now()
print(f"الوقت مع الميكروثواني: {now}")
print(f"الميكروثواني: {now.microsecond}")

العمليات الحسابية على التواريخ

استخدام timedelta

from datetime import date, datetime, timedelta

# العمليات على التواريخ
today = date.today()
tomorrow = today + timedelta(days=1)
last_week = today - timedelta(weeks=1)
next_month = today + timedelta(days=30)

print(f"غدًا: {tomorrow}")
print(f"قبل أسبوع: {last_week}")
print(f"بعد شهر: {next_month}")

# عمليات أكثر تعقيدًا
future_date = today + timedelta(days=100, hours=5, minutes=30)
print(f"بعد 100 يوم و5 ساعات و30 دقيقة: {future_date}")

حساب الفرق بين التواريخ

from datetime import date, datetime

start_date = date(2025, 1, 1)
end_date = date(2025, 12, 31)

# الفرق بالأيام
difference = end_date - start_date
print(f"الفرق بالأيام: {difference.days}")

# الفرق بالثواني لكائنات datetime
start_time = datetime(2025, 5, 9, 10, 0, 0)
end_time = datetime(2025, 5, 9, 15, 30, 45)

time_diff = end_time - start_time
print(f"الفرق بالثواني: {time_diff.total_seconds()}")
print(f"الفرق بالساعات: {time_diff.total_seconds() / 3600}")

تنسيق التواريخ والأوقات

طريقة strftime

from datetime import datetime

now = datetime.now()

# تنسيقات مختلفة
print(now.strftime("%Y-%m-%d"))  # 2025-05-09
print(now.strftime("%d/%m/%Y"))  # 09/05/2025
print(now.strftime("%A, %d %B %Y"))  # الجمعة، 09 مايو 2025
print(now.strftime("%H:%M:%S"))  # 14:30:45
print(now.strftime("%I:%M %p"))  # 02:30 مساءً

تحليل النصوص إلى تواريخ باستخدام strptime

from datetime import datetime

# تحويل نص إلى تاريخ
date_string = "2025-05-09 14:30:45"
parsed_date = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(f"التاريخ المحلل: {parsed_date}")

# تنسيقات أخرى
date_string2 = "09/05/2025"
parsed_date2 = datetime.strptime(date_string2, "%d/%m/%Y")
print(f"التاريخ المحلل: {parsed_date2}")

التعامل مع المناطق الزمنية

استخدام timezone

from datetime import datetime, timezone, timedelta

# إنشاء منطقة زمنية
utc_timezone = timezone.utc
local_timezone = timezone(timedelta(hours=3))  # توقيت موسكو (UTC+3)

# الحصول على الوقت الحالي في UTC
utc_now = datetime.now(utc_timezone)
print(f"توقيت UTC: {utc_now}")

# تحويل إلى منطقة زمنية محلية
local_now = utc_now.astimezone(local_timezone)
print(f"التوقيت المحلي: {local_now}")

استخدام pytz للمناطق الزمنية المتقدمة

# تثبيت المكتبة أولاً: pip install pytz
from datetime import datetime
import pytz

# الحصول على الوقت في منطقة زمنية محددة
cairo_timezone = pytz.timezone("Africa/Cairo")
cairo_time = datetime.now(cairo_timezone)
print(f"توقيت القاهرة: {cairo_time}")

# تحويل بين المناطق الزمنية
utc_time = datetime.now(pytz.utc)
riyadh_time = utc_time.astimezone(pytz.timezone("Asia/Riyadh"))
print(f"توقيت الرياض: {riyadh_time}")

أمثلة عملية

حساب العمر

from datetime import date

def calculate_age(birth_date):
    today = date.today()
    age = today.year - birth_date.year
    
    # التحقق مما إذا كان عيد الميلاد قد حدث هذا العام
    if (today.month, today.day) < (birth_date.month, birth_date.day):
        age -= 1
    
    return age

# مثال
birthday = date(1990, 5, 15)
age = calculate_age(birthday)
print(f"العمر: {age} سنة")

التحقق من صحة التاريخ

from datetime import datetime

def validate_date(date_string, format="%Y-%m-%d"):
    try:
        datetime.strptime(date_string, format)
        return True
    except ValueError:
        return False

# أمثلة
print(validate_date("2025-05-09"))  # True
print(validate_date("2025-13-01"))  # False (شهر غير صالح)
print(validate_date("09/05/2025", "%d/%m/%Y"))  # True

جدولة المهام

from datetime import datetime, timedelta

def schedule_task(start_date, days_ahead):
    scheduled_date = start_date + timedelta(days=days_ahead)
    return scheduled_date

# مثال: مهمة بعد 7 أيام من الآن
start = datetime.now()
task_date = schedule_task(start, 7)
print(f"تاريخ المهمة المجدولة: {task_date}")

نصائح وأفضل الممارسات

  • استخدم timezone.utc دائمًا للتخزين الداخلي للتواريخ لتجنب مشاكل المناطق الزمنية
  • عند التعامل مع تواريخ المستخدمين، قم دائمًا بالتحويل إلى UTC ثم التخزين
  • استخدم مكتبة pytz أو zoneinfo (Python 3.9+) للمناطق الزمنية المعقدة
  • تجنب استخدام datetime.now() بدون منطقة زمنية في التطبيقات العالمية
  • قم دائمًا بالتحقق من صحة تواريخ الإدخال باستخدام strptime أو مكتبات خارجية مثل dateutil

الخلاصة

مكتبة datetime في Python هي أداة أساسية لأي مطور. من خلال فهم الفئات الأساسية مثل date وtime وdatetime وtimedelta وtimezone، يمكنك التعامل مع أي متطلبات تتعلق بالتواريخ والأوقات في مشاريعك. تذكر دائمًا التعامل مع المناطق الزمنية بعناية لضمان دقة تطبيقاتك.

المدونات

توصيات الكتب