English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي لـ Python

تحكم في تدفق Python

الوظائف في Python

أنواع البيانات في Python

عمليات ملفات Python

كائنات وفئات Python

تواريخ ووقت Python

معرفة متقدمة في Python

دليل Python

التاريخ والوقت (datetime) في Python

في هذا المقال، ستعلم كيفية التعامل مع التواريخ والوقت في Python من خلال الأمثلة.

يوجد في Python اسمdatetimeمكتبة، تستخدم لمعالجة التواريخ والوقت. قبل أن نبدأ في التعلم، دعونا نكتب بعض البرامج البسيطة المتعلقة بالتواريخ والوقت.

مثال 1: الحصول على التاريخ والوقت الحالي

import datetime
datetime_object = datetime.datetime.now()
print(datetime_object)

عندما تقوم بتشغيل البرنامج، الناتج سيكون مشابهًا لـ:

2020-04-13 17:09:49.015911

في هذا المكان، قمنا بجلب مكتبة datetime باستخدام جملة import datetimedatetimeالمكتبة.

يحدد فئة datetime كائنًا في مكتبة datetime. ثم، نستخدم طريقة now() لإنشاء كائن datetime يحتوي على التاريخ والوقت المحليين.

مثال 2: الحصول على التاريخ الحالي

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类

datetime.date类

您可以从date类示例化date对象。date对象表示日期(年、月和日)。

示例3:表示日期的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)

示例4:获取当前日期

您可以使用一个名为today()的类方法来创建一个包含当前日期的date对象。方法如下:

from datetime import date
today = date.today()
print("当前日期 =", today)

示例5:从时间戳获取日期

我们还可以从时间戳创建日期对象。Unix时间戳是特定日期到UTC的1970年1月1日之间的秒数。可以使用fromtimestamp()方法将时间戳转换为日期。

from datetime import date
timestamp = date.fromtimestamp(1576244364)
print("日期 =", timestamp)

عند تشغيل هذا البرنامج، فإن الناتج يكون:

日期 = 2019-12-13

示例6:打印今天的年,月和日

我们可以轻松地从日期对象获取年,月,日,星期几等。就是这样:

from datetime import date
# 今天的日期对象
today = date.today() 
print("当前年:", today.year)
print("当前月:", today.month)
print("اليوم الحالي:", today.day)

datetime.time

يُمثل جسم الوقت الذي تم استنساخه من فئة time الوقت المحلي.

مثال 7: جسم الوقت

من 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

مثال 8: طباعة الساعة، الدقيقة، الثانية والمايكرو ثانية

بعد إنشاء جسم 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.datetime

يحتوي مكتبة datetime على فئة dateclass تُمكن من احتواءالتاريخوالوقتمعلومات الجسم.

مثال 9: جسم datetime بايثون

من 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() ضرورية.

مثال 10: طباعة السنة، الشهر، الساعة، الدقيقة وتوقيت

من 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

datetime.timedelta

مثل timedelta يُمثل الفرق بين تاريخين أو وقتين

مثال 11: الفرق بين تاريخين ووقتين

من 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'>.

مثال 12: الفرق بين كائنين 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يتم طباعة الفرق في الأيام المباشر على الشاشة.

مثال 13: طباعة كائن timedelta سالب

من 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

مثال 14: فترة زمنية (بالثواني)

يمكنك استخدام طريقة total_seconds() للحصول على عدد الثواني الكلية في كائن timedelta.

من datetime import timedelta
t = timedelta(days=5, hours=1, seconds=33, microseconds=233423)
print("الثواني الكلية =", t.total_seconds())

عند تشغيل هذا البرنامج، فإن الناتج يكون:

الثواني الكلية = 435633.233423

يمكنك أيضًا استخدام عمليات الجمع (+) لإيجاد مجموع تاريخين ووقتين. بالإضافة إلى ذلك، يمكنك ضرب كائن timedelta في عدد صحيح أو عدد عشري.

تنسيق التاريخ والوقت في Python

طريقة تمثيل التاريخ والوقت قد تختلف من مكان إلى آخر، ومنظمة إلى أخرى. في الولايات المتحدة، يُستخدم mm/dd/yyyy بشكل أكثر شيوعًا، بينما يُستخدم dd/mm/yyyy في المملكة المتحدة بشكل أكثر شيوعًا.

يستخدم Python طرق strftime() وstrptime() لحل هذه المشكلة.

Python strftime() - كائنات الوقت والوقت الديناميكي للنص

مетод strftime() معرف في فئات date،datetime وtime. يتم إنشاء سلسلة محددة النمط بناءً على تاريخ، تاريخ زمني أو كائن وقت معين.

مثال 15: استخدام strftime() لتشكيل التاريخ

من 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.

Python strptime()-سلسلة تاريخية和时间ية

يخلق طريقة strptime() من سلسلة معطاة (تُمثل تاريخًا ووقتًا) عنصر datetime.

مثال 16: strptime()

من 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() إثنين من المعاملين:

  1. السلسلة التي تمثل التاريخ والوقت

  2. تتوافق مع رموز الت 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 يحتوي على التاريخ والوقت الحالي مع مناطق الزمنية الخاصة به.