在 Python 中将“未知格式”字符串转换为日期时间对象


日期可以有多种格式,例如:“2009/05/13 19:19:30”、“May 13 2009 07:19PM”和“2009-05-13 19:19”。

Python 提供了许多模块来处理与日期时间相关的数据。要将日期字符串的未知格式读取到 python datetime 对象中,我们可以使用 python dateutil、datetime 模块。

python datetime 对象是一个包含日期和时间对象所有信息的单个对象。它表示与年份、月份、日期、小时、分钟、秒以及时区相关的数据。

在本文中,我们将了解如何将未知格式的字符串转换为 python datetime 对象。让我们看看输入-输出场景,以了解如何在 Python 中将未知格式的字符串转换为 datetime 对象。

输入输出场景

假设我们有未知格式的输入字符串。在输出中,我们可以看到转换后的 datetime 对象。

Input string (unknown format):
20050607T090650

Output Datetime object:
2005-07-06 09:06:50
Data type: 

使用 datetime.strptime() 方法

我们可以使用 datetime 库将日期时间字符串转换为 datetime 对象。strptime() 方法根据给定的格式代码将字符串解析为对应的 datetime 对象。以下是此方法的语法 -

datetime.strptime(data, format_data) 

其中,

  • 数据:date_string。

  • 格式:根据此格式代码转换 date_string。

一些格式代码是

  • %a 星期几的缩写名称。

  • %A 星期几的全称。

  • %w 星期几的十进制数字。

  • %d 带前导零的月份中的日期。

  • %B 月份的全称。

  • %b 月份的缩写名称。

  • %m 带前导零的月份。

  • %y 两位数表示的年份。

  • %Y 带世纪的年份。

  • %H 小时(24 小时制),以零填充的十进制数字表示。

  • %M 分钟,以零填充的十进制数字表示。

  • %S 秒,以零填充的十进制数字表示。

  • %z 格式为 ±HHMM[SS[.ffffff]] 的 UTC 偏移量。

  • %Z 时区名称。

示例

我们将使用 strptime() 方法将字符串数据中的日期转换为datetime对象。

from datetime import datetime
date_string = '20151002151700-0800'
print("Input string (unknown format):")
print(date_string)
obj = datetime.strptime(date_string, "%Y%m%d%H%M%S%z")
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

输出

Input string (unknown format):
20151002151700-0800
Output Datetime object:
2015-10-02 15:17:00-08:00
Data type: <class 'datetime.datetime'>

在上面的代码块中,我们可以看到从输入字符串转换后的 datetime 对象。我们已将格式“%Y%m%d%H%M%S%z”指定给 strptime() 方法。

示例

让我们再举一个例子,通过指定格式代码将日期字符串转换为datetime对象。

from datetime import datetime

date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)

obj = datetime.strptime(date_string, '%a %b %d %H:%M:%S %Y %z')
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

输出

Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>

这里“Wed Mar 16 16:12:05 2016 +0800”是字符串,obj 是 datetime 对象。

使用 dateutil.parser.parse() 函数

dateutil 模块的 parse() 方法非常灵活,可以解析给定字符串数据中的任何内容。parse 函数提供了更多格式来将日期字符串解析为 datetime 对象。

示例

在这里,我们将使用 parse() 方法将未知格式的字符串数据读取到 datetime 对象中。

from dateutil.parser import parse

date_string = 'Wed Mar 16 16:12:05 2016 +0800'
print("Input string (unknown format):")
print(date_string)

obj = parse(date_string)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

输出

Input string (unknown format):
Wed Mar 16 16:12:05 2016 +0800
Output Datetime object:
2016-03-16 16:12:05+08:00
Data type: <class 'datetime.datetime'>

上面代码块显示了从未知格式转换后的 datetime 对象。

示例

请注意,一些 date_string 可能不明确,例如:1995-06-07 可能表示 6 月 7 日或 7 月 6 日。parse 方法具有 dayfirst 和 yearfirst 等参数来处理此类模糊数据。

from dateutil.parser import parse

date_string = '20050607T090650'
print("Input string (unknown format):")
print(date_string)

obj = parse(date_string, dayfirst=True)
print("Output Datetime object:")
print(obj)
print('Data type:',type(obj))

输出

Input string (unknown format):
20050607T090650
Output Datetime object:
2005-07-06 09:06:50
Data type: <class 'datetime.datetime'>

在此示例中,我们已将布尔值 True 指定给 dayfirst 参数,因此在输出中,datetime 对象表示日期优先(6 月 7 日)。

更新于: 2023 年 5 月 30 日

2K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

立即开始
广告