在 Python 中将"未知格式"字符串转换为 datetime 对象
日期可以采用多种格式,例如:"2009/05/13 19:19:30"、"2009 年 5 月 13 日 07:19PM"和"2009-05-13 19:19"。
Python 提供了许多模块来处理与日期时间相关的数据。要将未知格式的日期字符串读入 Python datetime 对象,我们可以使用 Python dateutil、datetime 模块。
Python datetime 对象是一个包含有关日期和时间对象的所有信息的单个对象。它还表示与年、月、日、小时、分钟、秒和时区相关的数据。
在下面的这篇文章中,我们将了解如何将未知格式的字符串转换为 Python datetime 对象。让我们看看输入输出场景,以了解如何将未知格式的字符串转换为 Python datetime 对象。在 Python 中将格式字符串转换为日期时间对象。
输入输出场景
假设我们有未知格式的输入字符串。在输出中,我们可以看到转换后的日期时间对象。
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 UTC 偏移量,格式为 ±HHMM[SS[.ffffff]]。
%Z 时区名称。
示例
我们将字符串数据中的日期转换为datetime 对象,使用 strptime() 方法。
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 对象。我们为 strptime() 方法指定了格式"%Y%m%d%H%M%S%z"。
示例
我们再举一个例子,通过指定格式代码将日期字符串转换为 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_strings 可能存在歧义,例如: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'>
在此示例中,我们为 dayfirst 参数指定了布尔值 True,因此在输出中,datetime 对象表示第一天(6 月 7 日)。