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

0 股票
0
0
0
0

介绍

Python 的 datetime 和 time 模块都包含 strptime() 类方法,用于将字符串转换为对象。.

本文将介绍如何使用 strptime() 将字符串转换为 datetime 对象以及使用 struct_time()。.

使用 datetime.strptime() 将字符串转换为 datetime 对象

datetime.strptime() 方法的语法如下:

datetime.strptime(date_string, format)

datetime.strptime() 方法返回一个与 format 解析出的 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.struct_time()` 对象,该对象对应于指定格式解析的 `time_string`。`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() 方法会使用占位符值来表示 format 参数中未定义的任何格式指令。.

使用默认格式将字符串转换为 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 参数中未定义的任何格式指令,或者在没有提供 format 时使用默认值。.

排查 strptime() 错误。.

如果输入字符串无法使用 strptime() 提供的格式进行解析,则会引发 ValueError 异常。您可以使用 try 代码块来检测解析错误,并使用 else 代码块来打印结果。使用 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 将日期和时间字符串转换为日期和时间对象。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢