مقدمة
تتضمن وحدات التاريخ والوقت في بايثون طريقة فئة strptime() لتحويل السلاسل النصية إلى كائنات.
في هذه المقالة، ستستخدم الدالة strptime() لتحويل السلاسل النصية إلى كائنات التاريخ والوقت، بالإضافة إلى الدالة struct_time().
قم بتحويل سلسلة نصية إلى كائن تاريخ ووقت باستخدام دالة datetime.strptime()
صيغة دالة datetime.strptime() هي كما يلي:
datetime.strptime(date_string, format)
تُعيد الدالة datetime.strptime() كائن datetime يُطابق سلسلة التاريخ المُحللة بواسطة التنسيق. كلا الوسيطين مطلوبان ويجب أن يكونا من نوع سلسلة نصية.
للحصول على مزيد من التفاصيل حول أوامر التنسيق المستخدمة في datetime.strptime()، راجع أكواد التنسيق strftime() و strptime() في وثائق بايثون.
مثال على تحويل سلسلة نصية إلى كائن 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) # printed in default formatالناتج هو:
<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) # printed in default formatالناتج هو:
<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 locale
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() هي نفسها.
قم بتحويل السلسلة النصية إلى كائن 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
# default format - "%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 لاختبار أخطاء التحليل، بالإضافة إلى كتلة else لعرض النتائج. توضح رسائل 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'نتيجة
في هذا الدرس التعليمي، قمت بتحويل سلاسل التاريخ والوقت إلى كائنات التاريخ والوقت باستخدام لغة بايثون.









