مقدمه
ماژولهای datetime و time پایتون هر دو شامل یک متد کلاس strptime() برای تبدیل رشتهها به اشیا هستند.
در این مقاله، از strptime() برای تبدیل رشته ها به آبجکت datetime و struct_time() استفاده می کنید.
تبدیل رشته به شی datetime با استفاده از datetime.strptime()
سینتکس متد datetime.strptime() به صورت زیر است:
datetime.strptime(date_string, format)
متد datetime.strptime() یک شی datetime را برمی گرداند که با date_string تجزیه شده توسط قالب مطابقت دارد. هر دو آرگومان مورد نیاز هستند و باید رشته ای باشند.
برای جزئیات بیشتر در مورد دستورات قالب مورد استفاده در 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 تجزیه شده توسط قالب مطابقت دارد. زمان_رشته مورد نیاز است و هر دو آرگومان باید رشته باشند. اگر فرمت ارائه نشده باشد، پیش فرض این است:
'%a %b %d %H:%M:%S %Y'
این با فرمت بازگردانده شده توسط تابع ()ctime مطابقت دارد.
دستورات فرمت برای time.strptime() و time.strftime() یکسان است.
تبدیل رشته به شی struct_time() با فرمت مثال ارائه شده
مثال زیر یک رشته زمانی را با ارائه آرگومان format به یک شی ()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 برای آزمایش خطاهای تجزیه، همراه با بلوک غیر برای چاپ نتایج استفاده کنید. پیامهای 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'
نتیجه
در این آموزش شما رشته های تاریخ و زمان را با استفاده از پایتون به اشیاء تاریخ و زمان تبدیل کردید.