איך להמיר מחרוזת לאובייקט תאריך או זמן בפייתון

הקדמה

המודולים datetime ו־time של Python כוללים שיטת מחלקה בשם strptime() להמרת מחרוזות לאובייקטים.

במאמר זה, תשתמש ב־strptime() כדי להמיר מחרוזות לאובייקטים מסוג datetime ו־struct_time().

הפעל את היישומים שלך ב־Python מתוך GitHub באמצעות פלטפורמת היישומים של DigitalOcean. תן ל־DigitalOcean להתמקד בהתגברות על היישום שלך.

המרת מחרוזת לאובייקט מסוג datetime באמצעות datetime.strptime()

התחביר של שיטת datetime.strptime() הוא:

datetime.strptime(date_string, format)

שיטת datetime.strptime() מחזירה אובייקט מסוג datetime שתואם את המחרוזת date_string שנקראה על ידי הפורמט. שני הארגומנטים נדרשים וחייבים להיות מחרוזות.

לפרטים נוספים על הפקודות הפורמט שמשמשות ב־datetime.strptime(), ראה את קודי הפורמט של strftime() ו־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 שנפרקה על ידי הפורמט format. המחרוזת time_string נדרשת ושני הארגומנטים חייבים להיות מחרוזות. אם format לא מסופק, הברירת מחדל היא:

'%a %b %d %H:%M:%S %Y'

זה מתאים לפורמט שמוחזר על ידי פונקציית ctime().

ההכוונות לפורמט זהות עבור time.strptime() ו־time.strftime(). למידע נוסף על הפקודות המקובלות עבור מודול הזמן במסמך ה-Python.

המרת מחרוזת לאובייקט struct_time() עם דוגמה לפורמט שמסופק

הדוגמה הבאה ממירה מחרוזת זמן לאובייקט time.struct_time() על ידי מתן הארגומנט format, ומדפיסה את ערך האובייקט שנוצר:

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() משתמשת בערכי מציין מקום עבור כל הפקודות שאינן מוגדרות בארגומנט ה־format.

המרת מחרוזת לאובייקט struct_time() באמצעות דוגמה לפורמט ברירת מחדל

אם אינך מספק ארגומנט format כאשר אתה ממיר מחרוזת זמן לאובייקט time.struct_time(), אז הפורמט ברירת המחדל נעשה שימוש ושגיאה מתרחשת אם מחרוזת הקלט לא מתאימה בדיוק לפורמט ברירת המחדל:

 '%a %b %d %H:%M:%S %Y'

הדוגמה הבאה ממירה מחרוזת זמן לאובייקט time.struct_time() ללא הספקת ארגומנט format, ומדפיסה את ערך האובייקט התוצאה:

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() משתמשת בערכי מציין מקום עבור כל הוראות הפורמט שאינן מוגדרות בארגומנט format או על ידי פורמט ברירת המחדל אם לא סופק format.

איתור תקלות בשגיאות 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.

Source:
https://www.digitalocean.com/community/tutorials/python-string-to-datetime-strptime