مقدمة
يتضمن كل من وحدتي Python datetime
و time
طريقة فئة strptime()
لتحويل السلاسل إلى كائنات.
في هذا المقال، ستستخدم strptime()
لتحويل السلاسل إلى كائنات datetime
و struct_time()
.
نشر تطبيقات Python الخاصة بك من GitHub باستخدام منصة DigitalOcean App. دع DigitalOcean تركز على توسيع تطبيقك.
تحويل سلسلة إلى كائن datetime
باستخدام datetime.strptime()
صيغة طريقة datetime.strptime()
هي:
datetime.strptime(date_string, format)
تُرجع طريقة datetime.strptime()
كائنًا datetime
يتطابق مع سلسلة التاريخ التي تم تحليلها بواسطة التنسيق. كل من الوسيطتين مطلوبة ويجب أن تكونا سلاسلًا.
للحصول على تفاصيل حول التوجيهات التنسيق المستخدمة في datetime.strptime()
، راجع توجيهات التنسيق في الوثائق الخاصة بـ Python.
تحويل السلسلة إلى كائن datetime.datetime()
مثال
المثال التالي يحول سلسلة تاريخ ووقت إلى كائن datetime.datetime()
، ويقوم بطباعة اسم الفئة وقيمة الكائن الناتج:
from datetime import datetime
datetime_str = '09/19/22 13:55:26'
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')
print(type(datetime_object))
print(datetime_object) # يتم طباعته بتنسيق افتراضي
الناتج هو:
<class 'datetime.datetime'>
2022-09-19 13:55:26
تحويل السلسلة إلى كائن datetime.date()
مثال
المثال التالي يحول سلسلة تاريخ إلى كائن datetime.date()
، ويقوم بطباعة نوع الفئة وقيمة الكائن الناتج:
from datetime import datetime
date_str = '09-19-2022'
date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object) # يتم طباعته بتنسيق افتراضي
الناتج هو:
<class 'datetime.date'>
2022-09-19
تحويل السلسلة إلى كائن datetime.time()
مثال
المثال التالي يحول سلسلة زمنية إلى كائن datetime.time()
، ويقوم بطباعة نوع الصف وقيمة الكائن الناتج:
from datetime import datetime
time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)
الناتج هو:
<class 'datetime.time'>
13:55:26
تحويل السلسلة إلى كائن datetime.datetime()
مع مثال اللغة المحلية
المثال التالي يحول سلسلة تاريخ لغة الموقع الألمانية إلى كائن datetime.datetime()
، ويطبع نوع الصف وقيمة الكائن الناتج:
from datetime import datetime
import locale
locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag' # لغة الموقع de_DE
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)
الناتج هو:
<class 'datetime.datetime'>
2022-12-16 00:00:00
يرجى ملاحظة أن الكائن الناتج لا يتضمن اسم يوم الأسبوع من السلسلة المدخلة لأن كائن datetime.datetime()
يتضمن اسم اليوم فقط كرقم عشري.
تحويل سلسلة إلى كائن struct_time()
باستخدام time.strptime()
بناء الجملة لطريقة time.strptime()
هو:
time.strptime(time_string[, format])
الطريقة time.strptime()
تعيد كائن time.struct_time()
يتطابق مع النص time_string الذي تم تحليله بواسطة التنسيق. يُطلب النص time_string ويجب أن تكون كلتا الوسيطتين سلاسل. إذا كان التنسيق غير متوفر، فإن القيمة الافتراضية هي:
'%a %b %d %H:%M:%S %Y'
وهذا يتوافق مع التنسيق الذي يُعيد إيه الدالة ctime()
.
توجيهات التنسيق هي نفسها لكل من time.strptime()
و time.strftime()
. تعرف أكثر عن توجيهات التنسيق لوحدة time
في وثائق Python.
تحويل النص إلى كائن struct_time()
مع توفير التنسيق مثال
يقوم المثال التالي بتحويل نص زمني إلى كائن time.struct_time()
عن طريق توفير الوسيطة التنسيق، ويطبع قيمة الكائن الناتج:
import time
time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)
الناتج هو:
A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)
كما هو موضح في الناتج، عند تحويل سلسلة نصية إلى كائن time.struct_time()
، تستخدم الطريقة strptime()
قيمًا مؤقتة لأي توجيهات تنسيق لم يتم تحديدها في التنسيق.
تحويل سلسلة إلى كائن struct_time()
باستخدام مثال التنسيق الافتراضي
إذا لم تقدم وسيط التنسيق عند تحويل سلسلة زمنية إلى كائن time.struct_time()
، فإن التنسيق الافتراضي يُستخدم ويحدث خطأ إذا لم تتطابق السلسلة المدخلة بالضبط مع التنسيق الافتراضي ل:
'%a %b %d %H:%M:%S %Y'
يقوم المثال التالي بتحويل سلسلة زمنية إلى كائن time.struct_time()
بدون تقديم وسيط التنسيق ، ويقوم بطباعة قيمة الكائن الناتج:
import time
# التنسيق الافتراضي - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)
الناتج هو:
A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)
كما هو موضح في الناتج، عند تحويل سلسلة إلى كائن time.struct_time()
، يستخدم الطريقة strptime()
قيم العناصر النائبة لأي توجيهات تنسيق غير معرفة في وسيط التنسيق أو بواسطة التنسيق الافتراضي إذا لم يتم تقديم وسيط التنسيق.
حل مشاكل أخطاء strptime()
إذا لم يتم تحليل سلسلة الإدخال بواسطة strptime()
باستخدام التنسيق المقدم، يتم رفع استثناء ValueError
. يمكنك استخدام كتلة try
لاختبار الأخطاء في التحليل، جنبًا إلى جنب مع كتلة except
لطباعة النتائج. رسائل استثناء ValueError
التي تحصل عليها عند استخدام طريقة strptime()
توضح بوضوح أسباب أخطاء التحليل. يوضح المثال التالي بعض الأخطاء الشائعة، مثل وجود بيانات إضافية وعدم تطابق التنسيق:
from datetime import datetime
import time
datetime_str = '09/19/18 13:55:26'
try:
datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
print('ValueError 1:', ve1)
time_str = '99::55::26'
try:
time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
print('ValueError 2:', ve2)
الناتج هو:
ValueError 1: unconverted data remains: 13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'
الاستنتاج
في هذا البرنامج التعليمي، قمت بتحويل سلاسل التاريخ والوقت إلى كائنات datetime
و time
باستخدام Python. تابع تعلمك مع مزيد من برامج تعليم Python.
Source:
https://www.digitalocean.com/community/tutorials/python-string-to-datetime-strptime