如何在 Python 中将字符串转换为日期时间或时间对象

介绍

Python的日期时间模块都包含一个strptime()类方法来将字符串转换为对象。

在本文中,您将使用strptime()将字符串转换为datetimestruct_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将日期和时间字符串转换为日期时间时间对象。

Published At
Categories with 技术
comments powered by Disqus