Python 将“未知格式”字符串转换为datetime对象
日期可以有很多格式,比如:“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)
在这里,
- data:date_string。
-
format_data:根据这些格式代码将date_string转换。
几个格式代码是
- %a 缩写的工作日名称。
-
%A 完整的工作日名称。
-
%w 工作日的十进制数。
-
%d 月份中的日期,前导零。
-
%B 月份的全名。
-
%b 月份的缩写名称。
-
%m 月份的前导零。
-
%y 以两位数表示的年份。
-
%Y 带有世纪的年份。
-
%H (24小时制)以零填充的十进制数表示的小时。
-
%M 以零填充的十进制数表示的分钟。
-
%S 以零填充的十进制数表示的秒。
-
%z UTC偏移以±HHMM[SS[.ffffff]]形式。
-
%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'>
在上面的代码块中,我们可以看到从输入字符串转换出来的日期时间对象。我们已经指定了格式 ” %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'>
从未知格式转换的日期时间对象显示在上面的区块中。
示例
请注意,有些日期字符串可能存在歧义,例如: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日)。