بايثونالتعامل مع التاريخ و الوقت
- مقدمة
- الموديول
datetime
- كونستركتور الكلاس
datetime
- خصائص الكلاس
datetime
- تحديد فورمات التاريخ و الوقت
- الموديول
calendar
مقدمة
بايثون تحتوي على أكثر من موديول جاهز للتعامل مع التاريخ، الوقت و التقويم بكل سهولة.
في هذا الدرس ستتعلم طريقة الإستفادة من الموديول datetime
و الموديول calendar
لعرض التاريخ، الوقت و التقويم بالشكل الذي تحتاجه.
الموديول datetime
الموديول datetime
يحتوي على مجموعة كلاسات فيها دوال جاهزة للتعامل مع التاريخ و الوقت.
date
: يحتوي على مجموعة دوال خاصة للتعامل مع التاريخ.time
: يحتوي على مجموعة دوال خاصة للتعامل مع الوقت.datetime
: يحتوي على مجموعة دوال خاصة للتعامل مع التاريخ و الوقت.timedelta
: يحتوي على مجموعة دوال خاصة لحساب الفرق بدقة بين تاريخ و آخر.timezone
: يحتوي على مجموعة دوال خاصة لحساب فرق التوقيت بين تاريخ و آخر على حسب المنطقة الزمنية لكل تاريخ.
في المثال التالي قمنا بتخزين التاريخ و الوقت الحالي بالإعتماد على الدالة now()
الموجودة في الكلاس datetime
الموجود بداخل الموديول datetime
.
المثال الأول
# datetime هنا قمنا بتضمين كل محتوى الموديول import datetime # dt في الكائن datetime ككائن من الكلاس now() هنا قمنا بتخزين التاريخ و الوقت الحالي الذي سترجعه الدالة dt = datetime.datetime.now() # dt هنا قمنا بعرض قيمة الكائن print(dt)
النتيجة
نلاحظ أن الكلاس datetime
يتيح لنا الحصول على التاريخ و الوقت بدقة عالية لأنه أعطانا المعلومات التالية بالترتيب:
السنة، الشهر، اليوم، الساعة، الدقيقة، الثانية، أجزاء الثانية القادمة.
الكلاس datetime
يحتوي على دوال و خصائص جاهزة تتيح لنا التعامل مع التاريخ و الوقت كيفما شئنا سواء لتخزينه أو لعرضه بشكل محدد. سنتعرف على خصائص و دوال هذا الكلاس بالتفصيل في هذا الدرس.
كونستركتور الكلاس datetime
الكلاس datetime
يحتوي على الكونستركتور التالي.
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
إذاً، عند إنشاء كائن من الكلاس datetime
يمكن تحديد التاريخ و الوقت فيه بشكل يدوي.
فعلياً، الباراميترات year
و month
و day
يجب إعطاؤهم قيم لأنه لم يتم إعطاؤهم قيم إفتراضية.
بالنسبة للباراميترات الأخرى، يمكن تحديد قيمهم الأولية أو عدم تحديدها لأنهم يملكون قيم إفتراضية.
فيما يلي نطاق القيم التي يمكنك تمريرها للباراميترات:
year
: عدد صحيح قيمته ضمن النطاق1 <= year <= 9999
month
: عدد صحيح قيمته ضمن النطاق1 <= month <= 12
day
: عدد صحيح قيمته بين1
و آخر يوم موجود في الشهر.hour
: عدد صحيح قيمته ضمن النطاق0 <= hour < 24
minute
: عدد صحيح قيمته ضمن النطاق0 <= minute < 60
second
: عدد صحيح قيمته ضمن النطاق0 <= second < 60
microsecond
: عدد صحيح قيمته ضمن النطاق0 <= microsecond < 1000000
fold
: عدد صحيح قيمته0
أو1
في حال قمت بتمرير أي قيمة للباراميترات خارجة عن النطاق المسموح سيحدث خطأ ValueError.
في المثال التالي قمنا بإنشاء كائن من الكلاس datetime
مع تحديد التاريخ الذي نريد تخزينه فيه مباشرةً عند إنشاءه.
المثال الأول
# datetime هنا قمنا بتضمين كل محتوى الموديول import datetime # dt يمثل تاريخ محدد و قمنا بتخزينه في الكائن datetime هنا قمنا بإنشاء كائن من الكلاس dt = datetime.datetime(2012, 4, 5) # dt هنا قمنا بعرض قيمة الكائن print(dt)
النتيجة
في المثال التالي قمنا بإنشاء كائن من الكلاس datetime
مع تحديد التاريخ و الوقت الذي نريد تخزينه فيه مباشرةً عند إنشاءه.
المثال الثاني
# datetime هنا قمنا بتضمين كل محتوى الموديول import datetime # dt يمثل تاريخ + وقت محدد و قمنا بتخزينه في الكائن datetime هنا قمنا بإنشاء كائن من الكلاس dt = datetime.datetime(2012, 4, 5, 7, 30, 46) # dt هنا قمنا بعرض قيمة الكائن print(dt)
النتيجة
خصائص الكلاس datetime
الجدول التالي يحتوي على خصائص الكلاس datetime
الموجود في الموديول datetime
.
إسم الثابت | تعريفه |
---|---|
year |
يحتوي على رقم السنة المخزن في كائن الـdatetime . |
month |
يحتوي على رقم الشهر المخزن في كائن الـdatetime . |
day |
يحتوي على رقم اليوم المخزن في كائن الـdatetime . |
hour |
يحتوي على رقم الساعة المخزن في كائن الـdatetime . |
minute |
يحتوي على رقم الدقائق المخزن في كائن الـdatetime . |
second |
يحتوي على رقم الثواني المخزن في كائن الـdatetime . |
microsecond |
يحتوي على رقم أجزاء الثواني المخزن في كائن الـdatetime . |
في المثال التالي قمنا بعرض السنة فقط من التاريخ المخزن في كائن الـ datetime
بالإعتماد على الخاصية year
.
مثال
# datetime هنا قمنا بتضمين كل محتوى الموديول import datetime # dt في الكائن datetime ككائن من الكلاس now() هنا قمنا بتخزين التاريخ و الوقت الحالي الذي سترجعه الدالة dt = datetime.datetime.now() # dt الموجودة في الكائن year هنا قمنا بعرض قيمة الخاصية print('This tutorial is written in', dt.year)
النتيجة
تحديد فورمات التاريخ و الوقت
في البداية، المقصود بتحديد فورمات ( Format ) التاريخ و الوقت هو عرضه أو تخزينه أو بشكل مختلف.
لتحديد فورمات التاريخ و الوقت الذي نريد إظهاره نستخدم دالة جاهزة في الكلاس datetime
إسمها strftime()
.
إستخدام الدالة strftime()
قد يبدو أمر صعباً و لكنه في الحقيقة سهل جداً، حيث نستدعيها من كائن الـ datetime
و من ثم نمرر لها رمز أو مجموعة رموز منفصلة لتحديد الأشياء التي نريدها أن ترجعهم لنا كنص.
في المثال التالي قمنا بالإعتماد على الدالة strftime()
الموجودة في الكلاس datetime
لعرض إسم الشهر الحالي.
مثال
# datetime هنا قمنا بتضمين كل محتوى الموديول import datetime # dt في الكائن datetime ككائن من الكلاس now() هنا قمنا بتخزين التاريخ و الوقت الحالي الذي سترجعه الدالة dt = datetime.datetime.now() # و من ثم قمنا بطباعته dt لها كنص حتى ترجع إسم الشهر المخزن في الكائن %B و تمرير الرمز strftime() هنا قمنا باستدعاء الدالة print(dt.strftime('%B'))
النتيجة
الرموز التي يمكن إستخدامها في الدالة strftime()
الجدول التالي يحتوي على الرموز التي يمكنك إستخدامها عند تحديد فورمات التاريخ و الوقت باستخدام الدالة strftime()
.
الرمز | إستخدامه |
---|---|
%a |
لإظهار إسم اليوم بشكل مختصر، مثل: Mon شاهد مثال |
%A |
لإظهار إسم اليوم بشكل كامل، مثل: Monday شاهد مثال |
%w |
لإظهار رقم اليوم بالنسبة للأسبوع مع الإشارة إلى أن أول يوم في الأسبوع يُعتبر يوم الأحد ( Sunday ) و هو يساوي 0، و آخر يوم في الأسبوع هو يوم السبت ( Saturday ) و هو يساوي 6، مثل: 1 شاهد مثال |
%d |
لإظهار رقم اليوم بالنسبة للشهر مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 01 و 31 ، مثل: 03 شاهد مثال |
%b |
لإظهار إسم الشهر بشكل مختصر، مثل: Dec شاهد مثال |
%B |
لإظهار إسم الشهر كاملاَ، مثل: December شاهد مثال |
%m |
لإظهار رقم الشهر بالنسبة للسنة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 01 و 12 ، مثل: 12 شاهد مثال |
%y |
لإظهار رقم السنة بشكل مختصر، أي لإظهار أول رقمين منها فقط، مثل: 18 شاهد مثال |
%Y |
لإظهار رقم السنة، مثل: 2018 شاهد مثال |
%H |
لإظهار رقم الساعة بنظام 24 ساعة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 00 و 23 ، مثل: 14 شاهد مثال |
%I |
لإظهار رقم الساعة بنظام 12 ساعة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 00 و 11 ، مثل: 2 شاهد مثال |
%p |
لإظهار الكلمة AM إذا كان الوقت قبل الساعة 12 نهاراً و لإظهار الكلمة PM إذا كان الوقت بعدها.شاهد مثال |
%M |
لإظهار رقم الدقيقة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 00 و 59 ، مثل: 24 شاهد مثال |
%S |
لإظهار رقم الثانية مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 00 و 59 ، مثل: 09 شاهد مثال |
%f |
لإظهار أجزاء الثانية بالمايكرو ثانية ( Microsecond )، أي لإظهار الثانية الواحدة كمليون جزء مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 000000 و 999999 ، مثل: 034208 شاهد مثال |
%j |
لإظهار رقم اليوم بالنسبة للسنة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 001 و 366 ، مثل: 337 شاهد مثال |
%U | لإظهار رقم الأسبوع بالنسبة للسنة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 00 و 53 و أول يوم في كل أسبوع هو يوم الأحد ( Sunday )، مثل: 48 شاهد مثال |
%W |
لإظهار رقم الأسبوع بالنسبة للسنة مع الأخذ بالإعتبار أن هذا الرقم سيكون ضمن النطاق 00 و 53 و أول يوم في كل أسبوع هو يوم الإثنين ( Monday )، مثل: 49 شاهد مثال |
%c |
لإظهار التاريخ و الوقت الحالي بشكل كامل، مثل: Mon Dec 3 18:52:05 2018 شاهد مثال |
%x |
لإظهار التاريخ الحالي بشكل كامل، مثل: 12/03/18 شاهد مثال |
%X |
لإظهار الوقت الحالي بشكل كامل، مثل: 18:52:05 شاهد مثال |
الموديول calendar
الموديول calendar
يحتوي على مجموعة كلاسات و دوال جاهزة للتعامل مع التقويم و لعرضه بشكل جميل جداً.
فمثلاً, يحتوي على دوال جاهزة لعرض تقويم سنة معينة أو شهر محدد في السنة.
في المثال التالي قمنا بعرض تقويم سنة 2018 بالإعتماد على الدالة prcal()
الموجودة في الكلاس calendar
الموجود بداخل الموديول calendar
.
مثال
# calendar هنا قمنا بتضمين كل محتوى الموديول import calendar # لعرض تقويم سنة 2018 calendar من الكلاس prcal() هنا قمنا باستدعاء الدالة calendar.prcal(2018)
النتيجة
2018 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 3 4 8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11 15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18 22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25 29 30 31 26 27 28 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 6 1 2 3 2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10 9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17 16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24 23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30 30 July August September Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 1 2 3 4 5 1 2 2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9 9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16 16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23 23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30 30 31 October November December Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 1 2 3 4 1 2 8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9 15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16 22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23 29 30 31 26 27 28 29 30 24 25 26 27 28 29 30 31
دوال الكلاس calendar
الجدول التالي يحتوي على دوال الكلاس calendar
الأكثر إستخداماً.
إسم الدالة مع تعريفها | |
---|---|
1 | calendar.prcal(year, w=0, l=0, c=6, m=3)
تستخدم لطباعة تقويم سنة معينة.مكان الباراميتر year نمرر السنة التي نريد طباعة تقويمها.شاهد المثال |
2 | calendar.isleap(year)
تستخدم لمعرفة ما إذا كانت السنة كبيسة أم لا.مكان الباراميتر year نمرر رقم السنة التي نريد التشييك عليها.في حال كانت قيمة year تمثل سنة كبيسة ترجع True ، إن لم تكن كذلك ترجع False .شاهد المثال |
3 | calendar.leapdays(y1, y2)
ترجع عدد السنوات الكبيسة الموجودة من سنة إلى سنة محددة.مكان الباراميتر y1 نمرر رقم السنة التي نريد أن نبدأ من عندها.مكان الباراميتر y2 نمرر رقم السنة التي نريد أن نتوقف قبلها.شاهد المثال |
4 | calendar.setfirstweekday(weekday)
إفتراضياً، عند عرض التقويم فإنه يظهر يوم الإثنين ( Monday ) كأول يوم في الأسبوع.هذه الدالة تستخدم لتحديد أول يوم سيبدأ به كل أسبوع. مكان الباراميتر weekday نمرر إحدى ثوابت الكلاس calendar التي تشير إلى إسم اليوم أو Index الثابت:
|