【发布时间】:2016-08-06 07:02:05
【问题描述】:
有没有一种简单的方法可以将多种日期格式转换为 python 中的日期时间对象?最终,这些将被插入到类型为 DATE 的 MySQL 数据库中。
我可能收到的数据类型示例:
2008 年 8 月 2 日
04-02-2007
2014 年 5 月
转换我希望这些是:
2008-08-02
2007-04-02
2014-05-00
有没有一种简单的方法可以做到这一点,还是我必须对每个场景进行硬编码?
【问题讨论】:
有没有一种简单的方法可以将多种日期格式转换为 python 中的日期时间对象?最终,这些将被插入到类型为 DATE 的 MySQL 数据库中。
我可能收到的数据类型示例:
2008 年 8 月 2 日
04-02-2007
2014 年 5 月
转换我希望这些是:
2008-08-02
2007-04-02
2014-05-00
有没有一种简单的方法可以做到这一点,还是我必须对每个场景进行硬编码?
【问题讨论】:
使用第三方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,所以在"May 2014"的答案的第一部分将日期替换为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 月)填充日期,以使用该月的第一天、最后一天或当前日期。
【讨论】: