介绍
Python的日期
和时间
模块都包含一个strptime()
类方法来将字符串转换为对象。
在本文中,您将使用strptime()
将字符串转换为datetime
和struct_time()
对象。
将字符串转换为使用datetime.strptime()
的datetime
对象
用于datetime.strptime()
方法的语法是:
1datetime.strptime(date_string, format)
datetime.strptime()
方法返回一个 datetime
对象,该对象匹配由 format 解析的 date_string。
有关datetime.strptime()
中使用的格式指令的详细信息,请参阅 Python 文档中的strftime()
和strptime()
格式代码(https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes)。
将 String 转换为 datetime.datetime()
对象示例
下面的示例将日期和时间字符串转换为datetime.datetime()
对象,并打印结果对象的类名称和值:
1from datetime import datetime
2
3datetime_str = '09/19/22 13:55:26'
4
5datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')
6
7print(type(datetime_object))
8print(datetime_object) # printed in default format
产量是:
1<class 'datetime.datetime'>
22022-09-19 13:55:26
将 String 转换为 datetime.date()
对象示例
下面的示例将日期字符串转换为datetime.date()
对象,并打印结果对象的类型和值:
1from datetime import datetime
2
3date_str = '09-19-2022'
4
5date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
6print(type(date_object))
7print(date_object) # printed in default format
产量是:
1<class 'datetime.date'>
22022-09-19
将 String 转换为 datetime.time()
对象示例
下面的示例将一个时间字符串转换为一个 datetime.time()
对象,并打印结果对象的类型和值:
1from datetime import datetime
2
3time_str = '13::55::26'
4time_object = datetime.strptime(time_str, '%H::%M::%S').time()
5print(type(time_object))
6print(time_object)
产量是:
1<class 'datetime.time'>
213:55:26
将 String 转换为 datetime.datetime()
Object 使用本地示例
下面的示例将德国局部日期字符串转换为datetime.datetime()
对象,并打印结果对象的类型和值:
1from datetime import datetime
2import locale
3
4locale.setlocale(locale.LC_ALL, 'de_DE')
5date_str_de_DE = '16-Dezember-2022 Freitag' # de_DE locale
6datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
7print(type(datetime_object))
8print(datetime_object)
产量是:
1<class 'datetime.datetime'>
22022-12-16 00:00:00
请注意,结果对象不包括输入字符串中的周日名称,因为一个 datetime.datetime()
对象仅包含周日作为十进制数。
将字符串转换为 struct_time()
对象 使用 time.strptime()
「time.strptime()」方法的语法是:
1time.strptime(time_string[, format])
time.strptime()
方法返回一个time.struct_time()
对象,该对象匹配由 format 解析的 time_string。
1'%a %b %d %H:%M:%S %Y'
这与ctime()
函数返回的格式相匹配。
格式指令对于 time.strptime()
和 time.strftime()
是相同的. 了解 Python 文档中的 time
模块的 格式指令的更多信息。
将 String 转换为 struct_time()
与格式提供的对象 示例
下面的示例通过提供 format 参数来将时间字符串转换为 time.struct_time()
对象,并打印了结果对象的值:
1import time
2
3time_str = '11::33::54'
4time_obj = time.strptime(time_str, '%H::%M::%S')
5print("A time.struct_time object that uses the format provided:")
6print(time_obj)
产量是:
1A time.struct_time object that uses the format provided:
2time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
3tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
4tm_isdst=-1)
正如输出中所示,当您将字符串转换为time.struct_time()
对象时,strptime() 方法会为 format 参数中未定义的任何格式指令使用位值。
将 String 转换为 struct_time()
对象使用默认格式示例
如果在将时间字符串转换为time.struct_time()
对象时不提供 format 参数,则使用默认格式,如果输入字符串不完全匹配以下默认格式,则会出现错误:
1'%a %b %d %H:%M:%S %Y'
下面的示例将一个时间字符串转换为没有提供 format 参数的 time.struct_time()
对象,并打印结果对象的值:
1import time
2
3# default format - "%a %b %d %H:%M:%S %Y"
4time_str_default = 'Mon Dec 12 14:55:02 2022'
5time_obj_default = time.strptime(time_str_default)
6print("A time.struct_time object that uses the default format:")
7print(time_obj_default)
产量是:
1A time.struct_time object that uses the default format:
2time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
3tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
4tm_isdst=-1)
正如输出中所示,当您将字符串转换为time.struct_time()
对象时,strptime() 方法会为任何未在 format 参数中或默认格式中定义的格式指令使用定位值,如果没有提供 format。
修复strptime()
错误
如果输入字符串不能通过使用所提供的格式对 strptime()
进行解析,则会产生 ValueError
。 您可以使用 try
块来测试解析错误,以及 except
块来打印结果。 当您使用 strptime() 方法时获得的
ValueError` 消息清楚地解释了解析错误的根源原因。 以下示例显示了一些常见的错误,例如额外的数据和格式不匹配:
1from datetime import datetime
2import time
3
4datetime_str = '09/19/18 13:55:26'
5
6try:
7 datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
8except ValueError as ve1:
9 print('ValueError 1:', ve1)
10
11time_str = '99::55::26'
12
13try:
14 time_object = time.strptime(time_str, '%H::%M::%S')
15except ValueError as ve2:
16 print('ValueError 2:', ve2)
产量是:
1ValueError 1: unconverted data remains: 13:55:26
2ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'
结论
在本教程中,您使用Python将日期和时间字符串转换为日期时间
和时间
对象。