تحويل التواريخ والأوقات من وإلى السلاسل في Python datetime (strftime ، strptime)

اعمال

يمكن استخدام التاريخ والوقت القياسي لمكتبة 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']

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
Copied title and URL