Python 将“未知格式”字符串转换为datetime对象

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日)。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程