شرح datetime في بايثون: التعامل مع التاريخ والوقت للمبتدئين

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

لهذا السبب توفر بايثون وحدة جاهزة اسمها datetime. هذه الوحدة تساعدك على التعامل مع التاريخ والوقت بطريقة منظمة بدل الاعتماد على النصوص أو الحسابات اليدوية.

في هذا المقال من بايثون العرب سنتعلم شرح datetime في بايثون خطوة بخطوة، بداية من الحصول على التاريخ الحالي، مرورًا بتنسيق التاريخ باستخدام strftime، وتحويل النص إلى تاريخ باستخدام strptime، وحتى حساب الفروقات الزمنية باستخدام timedelta.

{getToc} $title={محتوى المقال}

{alertInfo} يمكنك تجربة جميع الأكواد مباشرة من خلال محرر بايثون العرب بدون تثبيت أي برنامج: محرر بايثون أون لاين

ما هي وحدة datetime في بايثون؟

وحدة datetime هي مكتبة مدمجة داخل بايثون، أي أنك لا تحتاج إلى تثبيتها. وظيفتها الأساسية هي مساعدتك في إنشاء التواريخ، قراءة الوقت الحالي، تنسيق التاريخ، تحويل النصوص إلى تواريخ، وحساب الفروقات الزمنية.

لاستخدامها، نبدأ بعملية الاستيراد:

import datetime

بعد الاستيراد تستطيع استخدام الأدوات الموجودة داخل الوحدة، مثل:

  • datetime.date للتعامل مع التاريخ فقط.
  • datetime.datetime للتعامل مع التاريخ والوقت معًا.
  • datetime.timedelta لحساب الفرق بين تاريخين أو إضافة أيام وساعات.

لماذا نحتاج datetime في مشاريع بايثون؟

قد تبدو التواريخ بسيطة في البداية، لكنها تظهر في مشاريع كثيرة جدًا. مثلًا:

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

1. الحصول على التاريخ الحالي في بايثون

إذا أردت الحصول على تاريخ اليوم فقط بدون الساعة، يمكنك استخدام date.today().

import datetime

today = datetime.date.today()

print(today)

مثال على الناتج:

2026-04-27

هذا مفيد عندما تريد تسجيل تاريخ اليوم فقط، مثل تاريخ إنشاء طلب، أو تاريخ حفظ تقرير، أو تاريخ دخول المستخدم.

2. الحصول على التاريخ والوقت معًا

إذا أردت التاريخ والوقت معًا، استخدم datetime.datetime.now().

import datetime

now = datetime.datetime.now()

print(now)

مثال على الناتج:

2026-04-27 18:45:12.123456

الناتج يحتوي على السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية، وحتى الميكروثانية.

3. استخراج أجزاء التاريخ والوقت

بعد الحصول على كائن التاريخ والوقت، يمكنك استخراج أجزاء محددة منه مثل السنة أو الشهر أو اليوم أو الساعة.

import datetime

now = datetime.datetime.now()

print(now.year)    # السنة
print(now.month)   # الشهر
print(now.day)     # اليوم
print(now.hour)    # الساعة
print(now.minute)  # الدقيقة
print(now.second)  # الثانية

هذه الطريقة مفيدة جدًا عندما تريد مثلًا عرض السنة فقط، أو بناء اسم ملف يحتوي على التاريخ، أو مقارنة الشهر الحالي بشهر معين.

4. إنشاء تاريخ أو وقت محدد

ليس دائمًا نحتاج إلى التاريخ الحالي. أحيانًا نريد إنشاء تاريخ معين، مثل تاريخ ميلاد، موعد اختبار، تاريخ انتهاء اشتراك، أو موعد حدث قادم.

لإنشاء تاريخ فقط:

import datetime

birthday = datetime.date(1995, 8, 15)

print(birthday)

الناتج:

1995-08-15

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

import datetime

meeting = datetime.datetime(2026, 4, 27, 14, 30, 0)

print(meeting)

الناتج:

2026-04-27 14:30:00
{alertWarning} انتبه لترتيب القيم عند إنشاء datetime: السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية.

5. تنسيق التاريخ باستخدام strftime

أحيانًا يكون شكل التاريخ الافتراضي غير مناسب للمستخدم. مثلًا قد تريد عرض التاريخ بهذه الطريقة: 27/04/2026 بدل: 2026-04-27.

هنا نستخدم الدالة strftime()، وهي تعني تحويل التاريخ إلى نص بتنسيق محدد.

import datetime

now = datetime.datetime.now()

print(now.strftime("%Y-%m-%d"))
print(now.strftime("%d/%m/%Y"))
print(now.strftime("%A, %d %B %Y"))
print(now.strftime("%I:%M %p"))

أمثلة على الناتج:

2026-04-27
27/04/2026
Monday, 27 April 2026
06:45 PM

أهم رموز strftime في بايثون

الرمز المعنى مثال
%Y السنة كاملة 2026
%m الشهر كرقم 04
%B اسم الشهر April
%d اليوم كرقم 27
%A اسم اليوم Monday
%H الساعة بنظام 24 18
%I الساعة بنظام 12 06
%M الدقائق 45
%S الثواني 12
%p AM أو PM PM
{alertInfo} استخدم strftime عندما تريد عرض التاريخ للمستخدم بشكل جميل ومفهوم.

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

أحيانًا تحصل على التاريخ كنص، مثل إدخال المستخدم: "15-08-1995". لكن إذا بقي التاريخ نصًا، لن تستطيع حساب الفرق بينه وبين تاريخ آخر بسهولة.

لذلك نستخدم strptime() لتحويل النص إلى كائن تاريخ حقيقي.

import datetime

date_string = "15-08-1995"

birthday = datetime.datetime.strptime(date_string, "%d-%m-%Y")

print(birthday)
print(type(birthday))

الناتج:

1995-08-15 00:00:00
<class 'datetime.datetime'>

لاحظ أن التنسيق "%d-%m-%Y" يجب أن يطابق شكل النص تمامًا. إذا كان النص مكتوبًا بهذه الطريقة "1995/08/15" فستحتاج إلى تنسيق مختلف.

الفرق بين strftime و strptime

الدالة ماذا تفعل؟ مثال مختصر
strftime تحول التاريخ إلى نص منسق date → string
strptime تحول النص إلى تاريخ string → date
{alertSuccess} تذكرها بسهولة: strftime تعني Format، أما strptime تعني Parse.

7. حساب الفرق بين تاريخين باستخدام timedelta

إذا أردت حساب الفرق بين تاريخين، فإن بايثون تعطيك كائنًا من نوع timedelta. هذا مفيد لحساب العمر بالأيام، أو الأيام المتبقية لموعد، أو مدة تنفيذ عملية.

from datetime import datetime

today = datetime.now()
birthday = datetime(1995, 8, 15)

age = today - birthday

print(age)
print(age.days)

يمكنك أيضًا إضافة أو طرح أيام وساعات باستخدام timedelta:

from datetime import datetime, timedelta

today = datetime.now()

one_week_later = today + timedelta(weeks=1)
yesterday = today - timedelta(days=1)

print(one_week_later)
print(yesterday.strftime("%Y-%m-%d"))

تستطيع استخدام معاملات مثل:

  • days للأيام.
  • weeks للأسابيع.
  • hours للساعات.
  • minutes للدقائق.
  • seconds للثواني.

8. التعامل مع المناطق الزمنية باستخدام zoneinfo

في التطبيقات الواقعية، قد تحتاج إلى التعامل مع أكثر من منطقة زمنية. مثلًا لديك مستخدم في الرياض وآخر في نيويورك، وتريد عرض الوقت المناسب لكل واحد.

في بايثون 3.9 وما بعده، يمكنك استخدام وحدة zoneinfo.

from datetime import datetime
from zoneinfo import ZoneInfo

riyadh_time = datetime.now(ZoneInfo("Asia/Riyadh"))
ny_time = datetime.now(ZoneInfo("America/New_York"))

print(riyadh_time)
print(ny_time)

converted = riyadh_time.astimezone(ZoneInfo("America/New_York"))
print(converted)
{alertInfo} المناطق الزمنية مهمة في تطبيقات المواعيد، المتاجر، التقارير، والأنظمة التي يستخدمها أشخاص من دول مختلفة.

9. مشروع صغير: عداد تنازلي باستخدام datetime

لنطبق ما تعلمناه في مشروع صغير يحسب الأيام المتبقية حتى بداية سنة 2027.

from datetime import datetime

new_year = datetime(2027, 1, 1)
now = datetime.now()

remaining = new_year - now

print("الأيام المتبقية حتى 2027:")
print(remaining.days)

هذا المثال يعلمك فكرة مهمة: التاريخ في بايثون ليس مجرد نص، بل كائن يمكن إجراء العمليات عليه.

أخطاء شائعة عند استخدام datetime

1. نسيان import datetime

إذا استخدمت datetime بدون استيرادها، سيظهر غالبًا خطأ NameError.

import datetime

2. الخلط بين date و datetime

date يمثل التاريخ فقط، أما datetime فيمثل التاريخ والوقت معًا.

النوع يمثل ماذا؟ مثال
date تاريخ فقط 2026-04-27
datetime تاريخ ووقت 2026-04-27 18:45:12

3. عدم مطابقة تنسيق strptime للنص

إذا كان النص بهذا الشكل:

15-08-1995

فيجب أن يكون التنسيق:

%d-%m-%Y

أما إذا كان النص بهذا الشكل:

1995/08/15

فسيكون التنسيق:

%Y/%m/%d

روابط مفيدة من بايثون العرب

الخلاصة

وحدة datetime من الأدوات المهمة في بايثون، لأنها تساعدك على التعامل مع التاريخ والوقت بطريقة عملية. تعلمنا في هذا المقال كيف نحصل على تاريخ اليوم، وكيف نقرأ الوقت الحالي، وكيف نستخرج أجزاء التاريخ، وننسق التاريخ باستخدام strftime، ونحول النص إلى تاريخ باستخدام strptime، ونحسب الفروقات الزمنية باستخدام timedelta.

ابدأ بتجربة الأمثلة البسيطة، ثم حاول بناء مشروع صغير مثل عداد تنازلي، أو برنامج يحسب العمر بالأيام، أو سكربت يسجل وقت تنفيذ مهمة معينة.

{alertSuccess} الخلاصة السريعة: استخدم datetime عندما تحتاج إلى تاريخ أو وقت حقيقي داخل برنامجك، ولا تتعامل مع التواريخ كنصوص إلا عند العرض أو الإدخال.

إرسال تعليق

أحدث أقدم