我正在使用datetime来转换时间字符串。我使用reference来指定格式。我应该如何编码格式?
In [19]:import datetime
In [20]: d
Out[20]: 'Oct. 30, 2014, 6:17 a.m.'
In [21]: format
Out[21]: '%b. %d, %Y, %I:%M%p.'
In [22]: date_object = datetime.datetime.strptime(d, format)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-22-78ccb659d6ac> in <module>()
----> 1 date_object = datetime.datetime.strptime(d, format)
/usr/lib/python2.7/_strptime.pyc in _strptime(data_string, format)
323 if not found:
324 raise ValueError("time data %r does not match format %r" %
--> 325 (data_string, format))
326 if len(data_string) != found.end():
327 raise ValueError("unconverted data remains: %s" %
ValueError: time data 'Oct. 30, 2014, 6:17 a.m.' does not match format '%b. %d, %Y, %I:%M%p.'
我遇到了这个工具,“dateutil”和
In [20]: d
Out[20]: 'Oct. 30, 2014, 6:17 a.m.'
In [34]: from dateutil import parser
In [35]: date_obj = parser.parse(d)
In [36]: date_obj
Out[36]: datetime.datetime(2014, 10, 30, 6, 17)
我明白了
/home/tilaprimera/.virtualenvs/picovico/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1278: RuntimeWarning: DateTimeField GCMDevice.created_at received a naive datetime (2014-10-30 06:17:00) while time zone support is active.
RuntimeWarning)
问题是,我正在尝试用这个时间查询数据库,但不幸的是,由于丢失了一些信息,我当时没有得到匹配。
答案 0 :(得分:3)
关闭,但没有雪茄。我用你的格式字符串做datetime.datetime.now().strftime()
并玩了一下就弄明白了。您需要进行两项更改:
d = 'Oct. 30, 2014, 6:17 AM'
format = '%b. %d, %Y, %I:%M %p'
遗憾的是,没有接受a.m.
的格式说明符(至少在我尝试过的英语语言环境中没有)。有关详情,请参阅此处:https://stackoverflow.com/a/2925280/4323
答案 1 :(得分:1)
自'a.m。'是非标准的,您可以使用re模块替换它。此外,您在分钟位置后的格式字符串中没有空格。
import datetime
import re
d='Oct. 30, 2014, 6:17 a.m.'
format='%b. %d, %Y, %I:%M %p'
d = re.sub('([pa])\.m\.',r'\1m',d)
date_object = datetime.datetime.strptime(re.sub('([pa])\.m\.',r'\1m',d),format)