在Python中如何将字符串转换为日期时间或时间对象
引言
Python的datetime和time模块都包含一个strptime()类方法,用于将字符串转换为对象。
在这篇文章中,您将使用strptime()将字符串转换为日期时间和struct_time()对象。
Info
使用datetime.strptime()将字符串转换为datetime对象
datetime.strptime()方法的语法是:
datetime.strptime(date_string, format)
datetime.strptime()方法返回与由格式解析的date_string匹配的datetime对象。两个参数都是必需的,且必须是字符串。
关于在datetime.strptime()中使用的格式指令的详细信息,请参阅Python文档中的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()对象仅以十进制数形式包含周几名称,所以结果对象中不包括来自输入字符串的周几名称。
使用time.strptime()方法将字符串转换为struct_time()对象
time.strptime()方法的语法是:
time.strptime(time_string[, format])
time.strptime()方法返回一个与按照指定格式解析的time_string匹配的time.struct_time()对象。time_string是必选参数,且两个参数都必须是字符串。如果未提供格式,则默认为:
'%a %b %d %H:%M:%S %Y'
这与ctime()函数返回的格式相对应。
时间解析函数time.strptime()和时间格式化函数time.strftime()的格式指令是相同的。请在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
# 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()方法对于在format参数中未定义的格式指令或者没有提供格式的默认格式,会使用占位符值。
解决strptime()错误的故障排除
如果使用提供的格式无法通过strptime()解析输入字符串,则会引发ValueError。您可以使用try块来测试解析错误,以及except块来打印结果。当您使用strptime()方法时,所获得的ValueError消息明确解释了解析错误的根本原因。下面的示例演示了一些常见的错误,例如额外的数据和格式不匹配。
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'
结论
在这个教程中,你使用Python将日期和时间字符串转换为日期时间和时间对象。通过更多的Python教程继续学习吧。