有没有办法将多个日期格式转换为datetime python

时间:2016-08-06 07:02:05

标签: python mysql datetime

有没有一种简单的方法可以在python中将多个日期格式转换为日期时间对象?最终将这些插入到DATE类型的MySQL数据库中。

我可能会收到什么类型的数据的示例:

2008年8月2日

2007年4月2日

2014年5月

转换我希望这些是:

2008-08-02

2007-04-02

2014-05-00

是否有一种简单的方法可以执行此操作,还是必须对每种方案进行硬编码?

2 个答案:

答案 0 :(得分:1)

使用第三方dateutil库:

>>> from dateutil import parser
>>> parser.parse("August 2, 2008")
datetime.datetime(2008, 8, 2, 0, 0)
>>> parser.parse("04-02-2007")
datetime.datetime(2007, 4, 2, 0, 0)
>>> parser.parse("May 2014")
datetime.datetime(2014, 5, 6, 0, 0)

转换为所需格式:

>>> parser.parse("August 2, 2008").strftime('%Y-%m-%d')
'2008-08-02'
>>> parser.parse("04-02-2007").strftime('%Y-%m-%d')
'2007-04-02'
>>> parser.parse("May 2014").strftime('%Y-%m-%d')
'2014-05-06'

您可以使用pip安装它:

pip install python-dateutil

另见:

>>> parser.parse("May 2014")
datetime.datetime(2014, 5, 6, 0, 0)
>>> # As you wanted day to be 0 and that is not valid
...
>>> datetime.datetime(2014, 5, 0, 0, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
>>> # Workaround:
...
>>> from datetime import datetime
>>> datedefault = datetime.now().replace(day=1, hour=0, minute=0, second=0, microsecond=0)
>>> parser.parse("May 2014",default=datedefault).strftime('%Y-%m-%d')
'2014-05-01'

如果日期字符串中未指定日期且未指定默认值,则将采用当天。由于今天为06 Aug 2016,因此在0的答案的第一部分中将日期替换为"May 2014"

答案 1 :(得分:0)

您可能还想结帐dateparser

>>> import dateparser
>>> dates = ['August 2, 2008', '04-02-2007', 'May 2014']
>>> [dateparser.parse(d, settings={'PREFER_DAY_OF_MONTH': 'first'}).strftime('%Y-%m-%d') for d in dates]
['2008-08-02', '2007-04-02', '2014-05-01']

另一方面,您可以指定填写缺少日期的日期(例如2014年5月),以使用该月的第一天,最后一天或当前。