English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا المقال، ستعلم كيفية التعامل مع التواريخ والوقت في Python من خلال الأمثلة.
يوجد في Python اسمdatetimeمكتبة، تستخدم لمعالجة التواريخ والوقت. قبل أن نبدأ في التعلم، دعونا نكتب بعض البرامج البسيطة المتعلقة بالتواريخ والوقت.
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
عندما تقوم بتشغيل البرنامج، الناتج سيكون مشابهًا لـ:
2020-04-13 17:09:49.015911
في هذا المكان، قمنا بجلب مكتبة datetime باستخدام جملة import datetimedatetimeالمكتبة.
يحدد فئة datetime كائنًا في مكتبة datetime. ثم، نستخدم طريقة now() لإنشاء كائن datetime يحتوي على التاريخ والوقت المحليين.
import datetime date_object = datetime.date.today() print(date_object)
عندما تقوم بتشغيل البرنامج، الناتج سيكون مشابهًا لـ:
2020-04-13
في هذا البرنامج، استخدمنا طريقة today() المحددة في فئة date من date لتحصل على كائن date يحتوي على تاريخ يومي محلي.
ما الذي يحتويه datetime؟
يمكننا استخدامdir()وظيفة للحصول على قائمة تحتوي على جميع خصائص الوحدة.
import datetime print(dir(datetime))
عند تشغيل هذا البرنامج، فإن الناتج يكون:
['MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', 'datetime', 'datetime_CAPI', 'time', 'timedelta', 'timezone', 'tzinfo']
datetime模块中常用的类是:
date类
time类
datetime类
timedelta类
您可以从date类示例化date对象。date对象表示日期(年、月和日)。
import datetime d = datetime.date(2019, 4, 13) print(d)
عند تشغيل هذا البرنامج، فإن الناتج يكون:
2019-04-13
如果您想知道,上面示例中的date()是date类的构造函数。构造函数有三个参数:年、月和日。
变量a是一个date对象。
我们只能从datetime模块中导入date类。就是这样:
from datetime import date a = date(2019, 4, 13) print(a)
您可以使用一个名为today()的类方法来创建一个包含当前日期的date对象。方法如下:
from datetime import date today = date.today() print("当前日期 =", today)
我们还可以从时间戳创建日期对象。Unix时间戳是特定日期到UTC的1970年1月1日之间的秒数。可以使用fromtimestamp()方法将时间戳转换为日期。
from datetime import date timestamp = date.fromtimestamp(1576244364) print("日期 =", timestamp)
عند تشغيل هذا البرنامج، فإن الناتج يكون:
日期 = 2019-12-13
我们可以轻松地从日期对象获取年,月,日,星期几等。就是这样:
from datetime import date # 今天的日期对象 today = date.today() print("当前年:", today.year) print("当前月:", today.month) print("اليوم الحالي:", today.day)
يُمثل جسم الوقت الذي تم استنساخه من فئة time الوقت المحلي.
من datetime import time # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(11, 34, 56) print("b =", b) # time(hour, minute and second) c = time(hour = 11, minute = 34, second = 56) print("c =", c) # time(hour, minute, second, microsecond) d = time(11, 34, 56, 234566) print("d =", d)
عند تشغيل هذا البرنامج، فإن الناتج يكون:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566
بعد إنشاء جسم time، يمكنك طباعة خصائصه بسهولة، مثلالساعة,الدقيقةوغيرها.
من datetime import time a = time(11, 34, 56) print("الساعة =", a.hour) print("الدقيقة =", a.minute) print("الثانية =", a.second) print("المايكرو ثانية =", a.microsecond)
عند تشغيل المثال، سيكون الناتج:
الساعة = 11 الدقيقة = 34 الثانية = 56 المايكرو ثانية = 0
لاحظ أننا لم نرسلالمايكرو ثانيةالمتغيرات. لذلك، سيتم طباعة القيمة الافتراضية 0.
يحتوي مكتبة datetime على فئة dateclass تُمكن من احتواءالتاريخوالوقتمعلومات الجسم.
من datetime استورد datetime #datetime(year, month, day) a = datetime(2019, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2019, 11, 28, 23, 55, 59, 342380) print(b)
عند تشغيل هذا البرنامج، فإن الناتج يكون:
2019-11-28 00:00:00 2019-11-28 23:55:59.342380
المستوى الأول الثلاثة من دالة datetime() ضرورية.
من datetime استورد datetime a = datetime(2019, 12, 28, 23, 55, 59, 342380) print("السنة =", a.year) print("الشهر =", a.month) print("اليوم =", a.day) print("الساعة =", a.hour) print("الشهر =", a.minute) print("توقيت =", a.timestamp())
عند تشغيل هذا البرنامج، فإن الناتج يكون:
السنة = 2019 الشهر = 12 اليوم = 28 الساعة = 23 الشهر = 55 توقيت = 1577548559.34238
مثل timedelta يُمثل الفرق بين تاريخين أو وقتين
من datetime استورد datetime, date t1 = date(year = 2018, month = 7, day = 12) t2 = date(year = 2017, month = 12, day = 23) t3 = t1 - t2 print("t3 =", t3) t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33) t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13) t6 = t4 - t5 print("t6 =", t6) print("نوع t3 =", type(t3)) print("نوع t6 =", type(t6))
عند تشغيل هذا البرنامج، فإن الناتج يكون:
t3 = 201 أيام، 0:00:00 t6 = -333 أيام، 1:14:20 نوع t3 = <class 'datetime.timedelta'> نوع t6 = <class 'datetime.timedelta'>
لاحظ،t3وt6كلها من نوع <class 'datetime.timedelta'>.
من datetime import timedelta t1 = timedelta(weeks=2, days=5, hours=1, seconds=33) t2 = timedelta(days=4, hours=11, minutes=4, seconds=54) t3 = t1 - t2 print("t3 =", t3)
عند تشغيل هذا البرنامج، فإن الناتج يكون:
t3 = 14 days, 13:55:39
في هذا السياق، قمنا بإنشاء كائنين timedeltat1وt2يتم طباعة الفرق في الأيام المباشر على الشاشة.
من datetime import timedelta t1 = timedelta(seconds=33) t2 = timedelta(seconds=54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
عند تشغيل هذا البرنامج، فإن الناتج يكون:
t3 = -1 day, 23:59:39 t3 = 0:00:21
يمكنك استخدام طريقة total_seconds() للحصول على عدد الثواني الكلية في كائن timedelta.
من datetime import timedelta t = timedelta(days=5, hours=1, seconds=33, microseconds=233423) print("الثواني الكلية =", t.total_seconds())
عند تشغيل هذا البرنامج، فإن الناتج يكون:
الثواني الكلية = 435633.233423
يمكنك أيضًا استخدام عمليات الجمع (+) لإيجاد مجموع تاريخين ووقتين. بالإضافة إلى ذلك، يمكنك ضرب كائن timedelta في عدد صحيح أو عدد عشري.
طريقة تمثيل التاريخ والوقت قد تختلف من مكان إلى آخر، ومنظمة إلى أخرى. في الولايات المتحدة، يُستخدم mm/dd/yyyy بشكل أكثر شيوعًا، بينما يُستخدم dd/mm/yyyy في المملكة المتحدة بشكل أكثر شيوعًا.
يستخدم Python طرق strftime() وstrptime() لحل هذه المشكلة.
مетод strftime() معرف في فئات date،datetime وtime. يتم إنشاء سلسلة محددة النمط بناءً على تاريخ، تاريخ زمني أو كائن وقت معين.
من datetime استورد datetime # current date and time now = datetime.now() t = now.strftime("%H:%M:%S") print("الوقت:", t) s1 = now.strftime("%m/%d/%Y, %H:%M:%S") # format mm/dd/YY H:M:S print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # format dd/mm/YY H:M:S print("s2:", s2)
عندما تقوم بتشغيل البرنامج، الناتج سيكون مشابهًا لـ:
الوقت: 04:34:52 s1: 12/26/2018, 04:34:52 s2: 26/12/2018, 04:34:52
هنا %Y،%m،%d،%H وما إلى ذلك هي رموز الصيغة. تأخذ طريقة strftime() رمزًا أو أكثر من الصيغة وتعيد سلسلة معيّنة وفقًا للصيغة.
في البرنامج المذكور أعلاه،t,s1وs2هي سلسلة.
%Y - السنة [0001،...،2018،2019،...،9999]
%m - الشهر [01،02،...،11،12]
%d - اليوم [01،02،...،30،31]
%H - الساعات [00،01،...،22،23
%M - الدقائق [00،01،...،58،59]
%S - الثواني [00،01،...،58،59]
للإطلاع على مزيد من المعلومات حول كود strftime() وضبط صيغته، يرجى زيارة:strftime() في Python.
يخلق طريقة strptime() من سلسلة معطاة (تُمثل تاريخًا ووقتًا) عنصر datetime.
من datetime استورد datetime date_string = "21 June, 2018" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object)
عند تشغيل هذا البرنامج، فإن الناتج يكون:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
يملك طريقة strptime() إثنين من المعاملين:
السلسلة التي تمثل التاريخ والوقت
تتوافق مع رموز الت format للمعامل الأول
بالمناسبة، رموز الت формат %d، %B و %Y تستخدم لليوم، الشهر (بالمسمى الكامل) والسنة.
زيارةstrptime() في Pythonللإطلاع على المزيد من المعلومات.
افترض أنك تعمل على مشروع، تحتاج إلى عرض التاريخ والوقت بناءً على منطقة الزمنية الخاصة به.مكتبة pytZبدلاً من معالجة المناطق الزمنية بأنفسنا.
من datetime استورد datetime import pytz local = datetime.now() print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S")) tz_NY = pytz.timezone('America/New_York') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
عندما تقوم بتشغيل البرنامج، الناتج سيكون مشابهًا لـ:
وقت محلي: 2018-12-20 13:10:44.260462 وقت America/New_York: 2018-12-20 13:10:44.260462 وقت Europe/London: 2018-12-20 13:10:44.260462
في هذا المكان،datetime_NYوdatetime_Londonهي كائن datetime يحتوي على التاريخ والوقت الحالي مع مناطق الزمنية الخاصة به.