في الدروس السابقة من كورس أساسيات بايثون تعلمنا الكثير من المفاهيم المهمة مثل التعامل مع الملفات، استخدام المكتبات، واستدعاء الوحدات باستخدام import. وفي هذا الدرس سننتقل إلى مكتبة مهمة جدًا في المشاريع العملية، وهي مكتبة datetime.
مكتبة datetime في Python تُستخدم للتعامل مع التاريخ والوقت، مثل معرفة تاريخ اليوم، طباعة الوقت الحالي، حساب الفرق بين تاريخين، إضافة أيام أو طرحها، تنسيق التاريخ بطريقة مفهومة، وبناء برامج تعتمد على المواعيد والتواريخ.
{getToc} $title={محتوى المقال}
الفكرة ببساطة: مكتبة datetime تجعل Python قادرة على التعامل مع التاريخ والوقت كقيم حقيقية يمكن حسابها ومقارنتها، وليس كنصوص عادية فقط. {alertInfo}
هذا الدرس مهم جدًا إذا كنت تريد بناء مشاريع Python حقيقية، لأن أغلب البرامج تحتاج بشكل أو بآخر إلى التعامل مع الوقت والتاريخ، مثل برامج المهام، الفواتير، التقارير، الحضور والانصراف، المتاجر الإلكترونية، وبرامج حساب العمر أو المدة المتبقية.
ما هي مكتبة datetime في Python؟
مكتبة datetime هي مكتبة قياسية تأتي مع Python، لذلك لا تحتاج إلى تثبيتها باستخدام pip. بمجرد تثبيت Python يمكنك استخدامها مباشرة داخل الكود.
تساعدك مكتبة datetime على التعامل مع:
- التاريخ مثل السنة والشهر واليوم.
- الوقت مثل الساعة والدقيقة والثانية.
- التاريخ والوقت معًا.
- حساب الفرق بين تاريخين.
- إضافة مدة زمنية إلى تاريخ معين.
- طرح مدة زمنية من تاريخ معين.
- تنسيق التاريخ ليظهر بشكل مفهوم للمستخدم.
- تحويل النصوص إلى تواريخ عند الحاجة.
مثال بسيط للحصول على تاريخ اليوم:
import datetime
today = datetime.date.today()
print(today)
هذا الكود يطبع تاريخ اليوم حسب التاريخ الموجود في جهازك أو بيئة التشغيل التي يعمل عليها البرنامج.
لماذا نحتاج إلى datetime بدل كتابة التاريخ كنص؟
قد تسأل: لماذا لا أكتب التاريخ كنص عادي هكذا؟
today = "2026-06-09"
هذا ممكن، لكنه لا يجعل Python تفهم أن هذه القيمة تاريخ حقيقي. بالنسبة لبايثون، هذا مجرد نص. لا يمكنك بسهولة إضافة أيام إليه أو حساب الفرق بينه وبين تاريخ آخر إلا بعد تحويله إلى كائن تاريخ.
أما عند استخدام datetime، يصبح التاريخ قيمة قابلة للحساب:
import datetime
today = datetime.date.today()
after_week = today + datetime.timedelta(days=7)
print(after_week)
نصيحة مهمة: إذا كنت تريد فقط عرض تاريخ كنص، يمكن أن يكون النص كافيًا. لكن إذا كنت تريد حسابات، مقارنة، إضافة أيام، أو طرح تواريخ، استخدم datetime. {alertSuccess}
استدعاء مكتبة datetime
توجد أكثر من طريقة لاستدعاء مكتبة datetime. الطريقة الأولى هي استيراد المكتبة كاملة:
import datetime
وبعدها نستخدم اسم المكتبة قبل الوصول إلى الأدوات الموجودة داخلها:
import datetime
now = datetime.datetime.now()
print(now)
وقد تبدو كتابة datetime.datetime غريبة في البداية، لكن الأولى هي اسم المكتبة، والثانية هي الكلاس الموجود داخل المكتبة.
الطريقة الثانية هي استدعاء الجزء المطلوب فقط:
from datetime import datetime
now = datetime.now()
print(now)
والطريقة الثالثة هي استدعاء أكثر من عنصر تحتاجه:
from datetime import date, datetime, timedelta
today = date.today()
now = datetime.now()
tomorrow = today + timedelta(days=1)
print(today)
print(now)
print(tomorrow)
للمبتدئين: استخدم الطريقة الأولىimport datetimeفي البداية حتى تفهم مصدر كل دالة بوضوح، ثم يمكنك لاحقًا استخدامfrom datetime import ...عندما تصبح مرتاحًا أكثر. {alertInfo}
الفرق بين date و time و datetime و timedelta
داخل مكتبة datetime توجد عناصر مهمة يجب أن تفرق بينها:
| العنصر | وظيفته | مثال |
|---|---|---|
date |
يمثل التاريخ فقط: سنة، شهر، يوم. | 2026-06-09 |
time |
يمثل الوقت فقط: ساعة، دقيقة، ثانية. | 14:30:00 |
datetime |
يمثل التاريخ والوقت معًا. | 2026-06-09 14:30:00 |
timedelta |
يمثل مدة زمنية أو فرقًا بين تاريخين. | 7 أيام |
فهم هذه العناصر يجعل التعامل مع المكتبة أسهل بكثير؛ لأنك ستعرف متى تستخدم التاريخ فقط، ومتى تحتاج التاريخ والوقت معًا، ومتى تحتاج مدة زمنية.
الحصول على تاريخ اليوم باستخدام date.today
إذا أردت معرفة تاريخ اليوم فقط بدون الوقت، استخدم date.today().
import datetime
today = datetime.date.today()
print("تاريخ اليوم:", today)
قد تظهر النتيجة مثل:
تاريخ اليوم: 2026-06-09
لاحظ أن الشكل الافتراضي للتاريخ يكون غالبًا بالترتيب:
- السنة.
- الشهر.
- اليوم.
وهذا الشكل مناسب للبرمجة لأنه واضح ومنظم، حتى لو كان المستخدم العربي معتادًا على كتابة اليوم أولًا ثم الشهر ثم السنة.
استخراج السنة والشهر واليوم من التاريخ
بعد الحصول على التاريخ، يمكنك استخراج أجزاء محددة منه مثل السنة أو الشهر أو اليوم.
import datetime
today = datetime.date.today()
print("السنة:", today.year)
print("الشهر:", today.month)
print("اليوم:", today.day)
هذه الخصائص مفيدة إذا كنت تريد بناء شرط يعتمد على السنة أو الشهر، مثل عرض رسالة مختلفة في شهر معين، أو حساب عمر تقريبي من سنة الميلاد.
إنشاء تاريخ محدد داخل Python
ليس شرطًا أن تستخدم تاريخ اليوم دائمًا. يمكنك إنشاء تاريخ معين بنفسك باستخدام date.
import datetime
birthday = datetime.date(2000, 5, 15)
print(birthday)
هذا الكود ينشئ تاريخًا محددًا وهو 15 مايو 2000.
انتبه: عند إنشاء تاريخ باستخدام date يكون الترتيب هكذا: السنة، الشهر، اليوم. وليس اليوم، الشهر، السنة. {alertWarning}
مثال آخر لإنشاء تاريخ موعد نهائي:
import datetime
deadline = datetime.date(2026, 12, 31)
print("الموعد النهائي:", deadline)
الحصول على الوقت والتاريخ الحالي معًا
إذا أردت الحصول على التاريخ والوقت الحاليين معًا، استخدم datetime.datetime.now().
import datetime
now = datetime.datetime.now()
print(now)
قد تظهر النتيجة مثل:
2026-06-09 14:30:15.123456
هذه النتيجة تحتوي على:
- السنة.
- الشهر.
- اليوم.
- الساعة.
- الدقيقة.
- الثانية.
- الميكروثانية.
استخراج الساعة والدقيقة والثانية
كما يمكن استخراج السنة والشهر واليوم، يمكن أيضًا استخراج الساعة والدقيقة والثانية من datetime.
import datetime
now = datetime.datetime.now()
print("الساعة:", now.hour)
print("الدقيقة:", now.minute)
print("الثانية:", now.second)
هذا مفيد في البرامج التي تحتاج إلى تسجيل وقت تنفيذ أمر معين، مثل برنامج يسجل وقت دخول المستخدم أو وقت إنشاء تقرير.
إنشاء وقت محدد باستخدام time
إذا أردت تمثيل الوقت فقط بدون تاريخ، يمكنك استخدام time.
import datetime
meeting_time = datetime.time(9, 30, 0)
print(meeting_time)
الناتج:
09:30:00
هذا المثال يمثل موعدًا في الساعة التاسعة والنصف صباحًا.
تنسيق التاريخ باستخدام strftime
الشكل الافتراضي للتاريخ في Python قد لا يكون مناسبًا دائمًا للقارئ، لذلك نستخدم strftime() لتنسيق التاريخ بالطريقة التي نريدها.
import datetime
today = datetime.date.today()
formatted_date = today.strftime("%d/%m/%Y")
print(formatted_date)
قد تظهر النتيجة مثل:
09/06/2026
هنا قمنا بعرض التاريخ بالشكل الأقرب للقارئ العربي: اليوم ثم الشهر ثم السنة.
أشهر رموز strftime
| الرمز | المعنى | مثال |
|---|---|---|
%d |
اليوم برقم من خانتين | 09 |
%m |
الشهر برقم من خانتين | 06 |
%Y |
السنة كاملة | 2026 |
%y |
آخر رقمين من السنة | 26 |
%H |
الساعة بنظام 24 ساعة | 14 |
%I |
الساعة بنظام 12 ساعة | 02 |
%M |
الدقيقة | 30 |
%S |
الثانية | 15 |
%A |
اسم اليوم | Tuesday |
%B |
اسم الشهر | June |
تنسيق التاريخ والوقت معًا
يمكنك تنسيق التاريخ والوقت معًا باستخدام strftime() أيضًا.
import datetime
now = datetime.datetime.now()
formatted = now.strftime("%d/%m/%Y - %H:%M:%S")
print(formatted)
قد تكون النتيجة:
09/06/2026 - 14:30:15
هذا الأسلوب مناسب عند عرض وقت إنشاء تقرير، أو وقت حفظ عملية، أو وقت تسجيل دخول المستخدم.
قاعدة عملية: استخدم strftime() عندما تريد تحويل التاريخ أو الوقت إلى شكل مناسب للعرض أمام المستخدم. {alertInfo}
تحويل النص إلى تاريخ باستخدام strptime
أحيانًا يكون لديك تاريخ مكتوب كنص، مثل تاريخ أدخله المستخدم:
date_text = "09/06/2026"
هذا النص لا يمكن حساب الفرق بينه وبين تاريخ آخر مباشرة. لذلك نستخدم strptime() لتحويله إلى تاريخ حقيقي.
import datetime
date_text = "09/06/2026"
real_date = datetime.datetime.strptime(date_text, "%d/%m/%Y")
print(real_date)
الناتج سيكون كائنًا من نوع datetime، وليس نصًا عاديًا.
معلومة مهمة: عند استخدام strptime() يجب أن يكون شكل النص مطابقًا تمامًا لشكل التنسيق الذي تكتبه، وإلا سيظهر خطأ. {alertWarning}
الفرق بين strftime و strptime
هناك تشابه في الاسم بين strftime و strptime، وهذا يسبب ارتباكًا للمبتدئين.
| الدالة | تعمل ماذا؟ | مثال الاستخدام |
|---|---|---|
strftime() |
تحول التاريخ إلى نص منسق. | عرض التاريخ للمستخدم. |
strptime() |
تحول النص إلى تاريخ. | قراءة تاريخ أدخله المستخدم. |
تذكرها بهذه الطريقة:
strftime: من تاريخ إلى نص.strptime: من نص إلى تاريخ.
حساب الفرق بين تاريخين
واحدة من أهم استخدامات مكتبة datetime هي حساب الفرق بين تاريخين. مثل حساب عدد الأيام المتبقية على نهاية السنة، أو حساب مدة اشتراك، أو معرفة كم يومًا مضى على تاريخ معين.
import datetime
today = datetime.date.today()
end_date = datetime.date(2026, 12, 31)
difference = end_date - today
print("عدد الأيام المتبقية:", difference.days)
عندما تطرح تاريخًا من تاريخ آخر، تكون النتيجة من نوع timedelta، ويمكنك الوصول إلى عدد الأيام باستخدام .days.
استخدام timedelta لإضافة أيام أو طرحها
إذا أردت إضافة مدة زمنية إلى تاريخ، نستخدم timedelta.
import datetime
today = datetime.date.today()
after_week = today + datetime.timedelta(days=7)
print("بعد أسبوع:", after_week)
ولطرح أيام:
import datetime
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
print("أمس:", yesterday)
ويمكنك استخدام الساعات والدقائق أيضًا:
import datetime
now = datetime.datetime.now()
after_two_hours = now + datetime.timedelta(hours=2)
print("بعد ساعتين:", after_two_hours)
قاعدة مفيدة: استخدم timedelta عندما تريد التعامل مع مدة زمنية، مثل يوم، أسبوع، ساعة، أو دقيقة. {alertSuccess}
مثال عملي: حساب العمر بشكل تقريبي
يمكننا استخدام datetime لحساب العمر بطريقة بسيطة اعتمادًا على سنة الميلاد.
import datetime
birth_year = 2000
current_year = datetime.date.today().year
age = current_year - birth_year
print("عمرك التقريبي هو:", age)
هذا الحساب تقريبي لأنه يعتمد على السنة فقط، ولا يتحقق هل مر تاريخ الميلاد في هذه السنة أم لا.
مثال عملي: حساب العمر بدقة أفضل
لحساب العمر بدقة أفضل، نحتاج إلى مقارنة اليوم والشهر أيضًا.
import datetime
birth_date = datetime.date(2000, 5, 15)
today = datetime.date.today()
age = today.year - birth_date.year
if (today.month, today.day) < (birth_date.month, birth_date.day):
age = age - 1
print("العمر:", age)
هذا المثال أكثر دقة لأنه يتحقق هل تاريخ الميلاد مر في السنة الحالية أم لا.
مثال عملي: حساب الأيام المتبقية على موعد
لنفترض أنك تريد معرفة كم يومًا متبقيًا على موعد تسليم مشروع.
import datetime
today = datetime.date.today()
deadline = datetime.date(2026, 7, 1)
remaining = deadline - today
if remaining.days > 0:
print("الأيام المتبقية:", remaining.days)
elif remaining.days == 0:
print("الموعد اليوم")
else:
print("الموعد انتهى منذ", abs(remaining.days), "يوم")
هذا المثال مهم جدًا في برامج المهام، المواعيد، الاشتراكات، والتقارير.
مثال عملي: برنامج تاريخ التسليم
في هذا المثال سنبني برنامجًا يحسب تاريخ التسليم بعد عدد معين من الأيام.
import datetime
today = datetime.date.today()
delivery_days = 10
delivery_date = today + datetime.timedelta(days=delivery_days)
print("تاريخ الطلب:", today)
print("تاريخ التسليم المتوقع:", delivery_date)
هذا النوع من الأكواد يمكن استخدامه في متجر إلكتروني بسيط أو برنامج إدارة طلبات.
مثال عملي: تسجيل وقت تنفيذ عملية
أحيانًا تحتاج إلى تسجيل الوقت الذي حدثت فيه عملية معينة، مثل حفظ ملف أو تنفيذ أمر.
import datetime
log_time = datetime.datetime.now()
formatted_time = log_time.strftime("%Y-%m-%d %H:%M:%S")
print("تم تنفيذ العملية في:", formatted_time)
هذا الأسلوب شائع في ملفات السجل أو ما يسمى logs، حيث يتم تسجيل وقت حدوث كل عملية.
مثال عملي: اسم ملف يحتوي على التاريخ
في بعض المشاريع قد تحتاج إلى إنشاء ملف باسم يحتوي على تاريخ اليوم، مثل تقرير يومي.
import datetime
today = datetime.date.today()
file_name = today.strftime("report_%Y_%m_%d.txt")
print(file_name)
قد تكون النتيجة:
report_2026_06_09.txt
هذا مفيد جدًا عند إنشاء تقارير يومية، أو حفظ نسخ احتياطية، أو تنظيم ملفات حسب التاريخ.
مشروع صغير: برنامج حساب الأيام المتبقية
الآن سنبني برنامجًا بسيطًا يحسب عدد الأيام المتبقية على تاريخ معين. سنستخدم تاريخًا ثابتًا في المثال حتى يكون واضحًا للمبتدئ.
import datetime
today = datetime.date.today()
event_date = datetime.date(2026, 12, 31)
difference = event_date - today
if difference.days > 0:
print("باقي على الموعد", difference.days, "يوم")
elif difference.days == 0:
print("الموعد اليوم")
else:
print("الموعد انتهى")
هذا المشروع يجمع بين:
- الحصول على تاريخ اليوم.
- إنشاء تاريخ محدد.
- طرح تاريخ من تاريخ آخر.
- استخدام الشرط
if. - عرض رسالة مناسبة حسب النتيجة.
مشروع صغير: برنامج حساب تاريخ انتهاء الاشتراك
لنفترض أنك تريد برنامجًا يحسب تاريخ انتهاء اشتراك بعد 30 يومًا من تاريخ اليوم.
import datetime
start_date = datetime.date.today()
subscription_days = 30
end_date = start_date + datetime.timedelta(days=subscription_days)
print("تاريخ بداية الاشتراك:", start_date)
print("تاريخ نهاية الاشتراك:", end_date)
هذا المثال قريب من التطبيقات الواقعية مثل مواقع الاشتراكات، الدورات، الخدمات المدفوعة، وأنظمة العضويات.
أخطاء شائعة عند استخدام datetime
1. نسيان كتابة datetime مرتين
عند استخدام:
import datetime
ثم تريد الوقت الحالي، يجب أن تكتب:
now = datetime.datetime.now()
وليس:
now = datetime.now()
إلا إذا كنت قد استخدمت:
from datetime import datetime
2. الخلط بين النص والتاريخ
هذا نص:
date_text = "2026-06-09"
أما هذا تاريخ حقيقي:
real_date = datetime.date(2026, 6, 9)
3. كتابة ترتيب التاريخ بشكل خاطئ
الترتيب الصحيح عند استخدام date هو:
datetime.date(year, month, day)
وليس:
datetime.date(day, month, year)
4. نسيان مطابقة تنسيق strptime
إذا كان النص بهذا الشكل:
"09/06/2026"
فيجب أن يكون التنسيق:
"%d/%m/%Y"
أما إذا كان النص بهذا الشكل:
"2026-06-09"
فيجب أن يكون التنسيق:
"%Y-%m-%d"
تنبيه مهم: أكثر أخطاء strptime() تحدث بسبب عدم تطابق شكل النص مع شكل التنسيق. راجع الرموز جيدًا قبل تشغيل الكود. {alertWarning}
أهم أوامر datetime للمبتدئين
| الأمر | وظيفته | مثال |
|---|---|---|
date.today() |
الحصول على تاريخ اليوم. | datetime.date.today() |
datetime.now() |
الحصول على التاريخ والوقت الحاليين. | datetime.datetime.now() |
date() |
إنشاء تاريخ محدد. | datetime.date(2026, 6, 9) |
time() |
إنشاء وقت محدد. | datetime.time(9, 30, 0) |
timedelta() |
إضافة أو طرح مدة زمنية. | datetime.timedelta(days=7) |
strftime() |
تحويل التاريخ إلى نص منسق. | today.strftime("%d/%m/%Y") |
strptime() |
تحويل النص إلى تاريخ. | datetime.strptime(text, "%d/%m/%Y") |
متى أستخدم datetime في مشاريعي؟
استخدم مكتبة datetime عندما تحتاج إلى أي عملية مرتبطة بالتاريخ أو الوقت. ومن أمثلة ذلك:
- برنامج يحسب العمر.
- برنامج يحسب الأيام المتبقية على موعد.
- برنامج يسجل وقت تنفيذ العمليات.
- برنامج ينشئ تقارير يومية.
- برنامج يتعامل مع اشتراكات أو مواعيد انتهاء.
- برنامج يحفظ ملفات بأسماء تحتوي على تاريخ اليوم.
- برنامج يحسب الفرق بين تاريخين.
- برنامج يعرض التاريخ للمستخدم بتنسيق واضح.
تمرين تطبيقي على datetime
حاول تنفيذ التمرين التالي بنفسك:
- أنشئ ملفًا باسم
datetime_practice.py. - استدع مكتبة
datetime. - اطبع تاريخ اليوم.
- اطبع التاريخ والوقت الحاليين.
- أنشئ تاريخًا لموعد بعد 30 يومًا.
- اطبع التاريخ الجديد.
- احسب عدد الأيام بين اليوم وهذا الموعد.
- اعرض التاريخ بالشكل
day/month/year.
الحل المقترح:
import datetime
today = datetime.date.today()
now = datetime.datetime.now()
future_date = today + datetime.timedelta(days=30)
difference = future_date - today
formatted_today = today.strftime("%d/%m/%Y")
print("تاريخ اليوم:", today)
print("التاريخ والوقت الآن:", now)
print("بعد 30 يومًا:", future_date)
print("عدد الأيام:", difference.days)
print("تاريخ اليوم بشكل منسق:", formatted_today)
روابط داخلية مفيدة من بايثون العرب
لفهم هذا الدرس بشكل أفضل، يمكنك مراجعة هذه الدروس من موقع بايثون العرب:
- كورس أساسيات بايثون للمبتدئين
- شرح Modules و import في Python للمبتدئين
- شرح try و except في Python والتعامل مع الأخطاء
- شرح التعامل مع الملفات في Python للمبتدئين
- شرح مكتبة pathlib في Python للتعامل مع مسارات الملفات
مصادر خارجية رسمية للتوسع
بعد فهم الأساسيات، يمكنك الرجوع إلى التوثيق الرسمي للتوسع أكثر:
الخلاصة
مكتبة datetime من أهم مكتبات Python القياسية، لأنها تساعدك على التعامل مع التاريخ والوقت داخل البرامج بطريقة منظمة. باستخدامها يمكنك معرفة تاريخ اليوم، طباعة الوقت الحالي، إنشاء تاريخ محدد، حساب الفرق بين تاريخين، إضافة أيام أو ساعات، وتنسيق التاريخ بالشكل المناسب للمستخدم.
إذا كنت تتعلم Python لبناء مشاريع عملية، فلا تتجاوز هذه المكتبة. قد تبدو بسيطة في البداية، لكنها ستظهر معك كثيرًا في البرامج الحقيقية، خصوصًا عند التعامل مع التقارير، المواعيد، الاشتراكات، السجلات، الملفات اليومية، وأنظمة المتابعة.
الخلاصة العملية: استخدمdate.today()لتاريخ اليوم، وdatetime.now()للتاريخ والوقت الحاليين، وtimedelta()لإضافة أو طرح مدة زمنية، وstrftime()لتنسيق التاريخ قبل عرضه للمستخدم. {alertSuccess}
أسئلة شائعة مع إجاباتها
هل أحتاج إلى تثبيت مكتبة datetime؟
لا. مكتبة datetime من مكتبات Python القياسية، لذلك لا تحتاج إلى تثبيتها باستخدام pip. فقط استخدم import datetime.
ما فائدة مكتبة datetime في Python؟
تُستخدم مكتبة datetime للتعامل مع التاريخ والوقت، مثل معرفة تاريخ اليوم، حساب الفرق بين تاريخين، إضافة أيام، تنسيق التاريخ، وتحويل النصوص إلى تواريخ.
ما الفرق بين date و datetime؟
date يمثل التاريخ فقط مثل السنة والشهر واليوم، أما datetime فيمثل التاريخ والوقت معًا.
كيف أحصل على تاريخ اليوم في Python؟
استخدم:
import datetime
print(datetime.date.today())
كيف أحصل على الوقت الحالي في Python؟
استخدم:
import datetime
print(datetime.datetime.now())
كيف أضيف 7 أيام إلى تاريخ اليوم؟
استخدم timedelta بهذا الشكل:
import datetime
today = datetime.date.today()
after_week = today + datetime.timedelta(days=7)
print(after_week)
كيف أحول التاريخ إلى شكل يوم/شهر/سنة؟
استخدم strftime():
formatted_date = today.strftime("%d/%m/%Y")
ما الفرق بين strftime و strptime؟
strftime() تحول التاريخ إلى نص منسق، أما strptime() فتحول النص إلى تاريخ يمكن التعامل معه برمجيًا.
هل أستخدم datetime في المشاريع الصغيرة؟
نعم. حتى المشاريع الصغيرة قد تحتاج إلى التاريخ والوقت، مثل برنامج ملاحظات، برنامج مهام، برنامج حساب عمر، أو برنامج يحفظ ملفًا باسم يحتوي على تاريخ اليوم.




