يمكن استخدام التاريخ والوقت القياسي لمكتبة Python لمعالجة التواريخ والأوقات (التواريخ والأوقات والأوقات). يمكن استخدام التابعين strftime () و strptime () ، اللذان يحولان التواريخ والأوقات من السلاسل وإليها ، لمعالجة التواريخ والأوقات بتنسيقات متنوعة.
يمكنه أيضًا إجراء عمليات مثل الطرح والجمع. على سبيل المثال ، يمكنك بسهولة حساب التاريخ والحصول عليه قبل 10 أيام أو 3 أسابيع من الآن ، أو الوقت بعد 50 دقيقة من الآن.
أولاً ، سنصف الفئات التالية من العناصر المتوفرة في وحدة التاريخ والوقت.
datetime.datetime
:التاريخ والوقت (التاريخ والوقت)datetime.date
:تاريخdatetime.time
:زمنdatetime.timedelta
:فارق التوقيت والوقت المنقضي
يتم أيضًا شرح الطرق strftime () و strptime () ، اللتان تحوّلان التاريخ / الوقت والسلسلة إلى بعضها البعض.
datetime
موضوعdatetime.now()
:تاريخ اليوم ، الوقت الحاليdatetime
منشئ الكائن- تحويل كائن التاريخ والوقت إلى كائن تاريخ
date
موضوعdate.today()
:تاريخ اليوم- مُنشئ كائن التاريخ
time
موضوع- منشئ كائن الوقت
timedelta
موضوع- اطرح كائنات التاريخ والوقت لإنشاء كائنات زمنية.
- مُنشئ كائن timedelta
- الطرح والجمع باستخدام كائنات timedelta
strftime()
:التحويل من التاريخ والوقت إلى السلسلةstrptime()
:التحويل من السلسلة إلى التاريخ والوقت
تشتمل المكتبة القياسية أيضًا على وحدة التقويم ، والتي تنشئ التقويمات بتنسيق نص عادي أو بتنسيق HTML.
كائن التاريخ والوقت
عنصر التاريخ والوقت هو كائن يحتوي على معلومات التاريخ (السنة ، الشهر ، اليوم) والوقت (الساعة ، الدقيقة ، الثانية ، الميكروثانية). يمكنك الوصول إلى هذه المعلومات بالسمات التالية.
year
month
day
hour
minute
second
microsecond
datetime.now():تاريخ اليوم ، الوقت الحالي
سيعطيك datetime.now () كائن تاريخ / وقت مع تاريخ اليوم (التاريخ الحالي) والوقت الحالي.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
مُنشئ كائن التاريخ والوقت
من الممكن أيضًا إنشاء كائنات التاريخ والوقت لتواريخ وأوقات عشوائية.
المُنشئ لكائن التاريخ والوقت كما يلي.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
القيم التالية مطلوبة ويمكن حذف القيم الأخرى. إذا تم حذفها ، فإن القيمة الافتراضية هي 0.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
تحويل كائن التاريخ والوقت إلى كائن تاريخ
يمكن تحويل كائن التاريخ والوقت إلى كائن تاريخ بواسطة طريقة date () ، كما هو موضح أدناه.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
كائن التاريخ
كائن التاريخ هو كائن يحتوي على معلومات حول تاريخ (سنة ، شهر ، يوم). يمكن الوصول إليها من خلال سمات السنة والشهر واليوم.
date.today():تاريخ اليوم
يمكن الحصول على كائن التاريخ للتاريخ الحالي (تاريخ اليوم) باستخدام date.today ().
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
مُنشئ كائن التاريخ
مُنشئ كائن التاريخ هو كما يلي
date(year, month, day)
كلها مطلوبة ولا يمكن حذفها.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
كائن الوقت
كائن الوقت هو كائن يحتوي على معلومات حول الوقت (الساعات والدقائق والثواني والميكروثانية). يمكن الوصول إليها باستخدام السمات ساعة ودقيقة وثانية وميكرو ثانية.
منشئ كائن الوقت
منشئ كائن الوقت كما يلي.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
كلهم اختياريون ، وإذا تم حذفهم ، فسيتم تعيينهم على 0.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
كائن timedelta
كائن timedelta هو كائن يمثل الفارق الزمني بين تاريخين ووقتين ، أو الوقت المنقضي. تحتوي على معلومات بالأيام والثواني والميكروثانية ، ويمكن الوصول إليها من خلال السمات الأيام والثواني والميكروثانية. من الممكن أيضًا الحصول على إجمالي عدد الثواني باستخدام طريقة total_seconds ().
اطرح كائنات التاريخ والوقت والتاريخ لإنشاء كائن مخطط زمني.
ينتج عن طرح كائنات التاريخ والوقت من بعضها البعض كائن timeedelta.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
ينتج عن طرح كائنات التاريخ من بعضها البعض أيضًا كائن timedelta.
مُنشئ كائن timedelta
منشئ كائن timedelta كما يلي
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
كلهم اختياريون ، وإذا تم حذفهم ، فسيتم تعيينهم على 0.
لاحظ أن كائن timedelta يحتوي فقط على المعلومات التالية.
- عدد الأيام:
days
- عدد الثواني:
seconds
- العد ميكروثانية:
microseconds
على سبيل المثال ، الاثنان التاليان متساويان
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
الطرح والجمع باستخدام كائنات timedelta
يمكن استخدام كائن timedelta مع كائنات التاريخ والوقت لإجراء عمليات مثل الطرح والإضافة. على سبيل المثال ، يمكنك بسهولة حساب التاريخ والحصول عليه قبل أسبوع واحد أو 10 أيام من الآن ، أو الوقت بعد 50 دقيقة من الآن.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
يمكن استخدامه أيضًا لحساب عدد الأيام حتى تاريخ محدد.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime():التحويل من التاريخ والوقت إلى السلسلة
يمكن استخدام طريقة strftime () لكائنات التاريخ والوقت لتحويل معلومات التاريخ والوقت (التاريخ والوقت) إلى سلسلة بأي تنسيق.
كود التنسيق
راجع الوثائق الرسمية أدناه للحصول على رموز التنسيق المتاحة.
رموز التنسيق الرئيسية مذكورة أدناه.
%d
:يوم من الشهر بالتدوين العشري مع ملء الصفر.%m
:الشهر بالتدوين العشري مع ملء الصفر.%y
:آخر رقمين من السنة بترميز عشري مملوء بصفر.%Y
:أربعة أرقام من السنة بالتدوين العشري مع ملء الصفر.%H
:عندما يتم التعبير عنها بترميز عشري بصفر مملوء (تدوين مدته 24 ساعة)%I
:عندما يتم التعبير عنها بالتدوين العشري بصفر مملوء (تدوين مدته 12 ساعة)%M
:للترميز العشري بصفر مملوء.%S
:الثواني في التدوين العشري مع ملء الصفر.%f
:ميكرو ثانية (6 أرقام) بالتدوين العشري مع 0 معبأ.%A
:اسم يوم الأسبوع للإعدادات المحلية%a
:اسم اليوم للإعدادات المحلية (صيغة مختصرة)%B
:اسم الشهر المحلي%b
:اسم شهر اللغة (صيغة مختصرة)%j
:يوم من السنة بالتدوين العشري بدون تعبئة.%U
:رقم الأسبوع من السنة بالتدوين العشري مع صفر تعبئة (يبدأ الأسبوع يوم الأحد)%W
:رقم الأسبوع من السنة بالتدوين العشري بصفر تعبئة (يبدأ الأسبوع يوم الإثنين)
يمكن الحصول على أكواد التنسيق التالية لأسماء اليوم والشهر في سلاسل مختلفة حسب اللغة.
%A
%a
%B
%b
هناك أيضًا طريقة مخصصة لسلاسل تنسيق ISO 8601.
عينة من الرموز
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
إذا كنت ترغب في الحصول على رقم بدلاً من سلسلة ، ما عليك سوى تحويله إلى عدد صحيح باستخدام int ().
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
بالاشتراك مع كائن timedelta ، من السهل إنشاء ، على سبيل المثال ، قائمة بالتواريخ نصف الشهرية بأي تنسيق.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
يعد استخدام تدوين قائمة الفهم أكثر ذكاءً.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- مقالات ذات صلة:استخدام تدوين Python list comprehensions
strptime():التحويل من السلسلة إلى التاريخ والوقت
يمكن استخدام strptime () datetime لإنشاء كائن تاريخ أو وقت من سلسلة تاريخ أو وقت. من الضروري تحديد سلسلة التنسيق المقابلة للسلسلة الأصلية.
هناك أيضًا طريقة مخصصة لسلاسل ISO 8601 (Python 3.7 أو أحدث).
عينة من الرموز
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
باستخدام طريقة strftime () على كائن التاريخ والوقت المسترجع ، يمكنك تمثيل التاريخ والوقت بتنسيق مختلف عن السلسلة الأصلية.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
إذا قمت بتحويله إلى كائن تاريخ / وقت ، فيمكنك أيضًا إجراء عمليات باستخدام كائنات timedelta ، على سبيل المثال ، يمكنك إنشاء سلسلة من التاريخ قبل 10 أيام بنفس التنسيق.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22