【问题标题】:Trying to convert to datetime尝试转换为日期时间
【发布时间】:2015-03-13 12:24:03
【问题描述】:

我正在使用 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)

问题是,我正在尝试用这个时间查询数据库,但不幸的是,由于丢失了一些信息,我没有及时找到匹配项。

【问题讨论】:

  • 请添加语言标签
  • 我想问题在于它所说的字符串“与您提供的格式不匹配”​​。请仔细检查。

标签: python datetime


【解决方案1】:

关闭,但没有雪茄。我通过使用您的格式字符串执行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

【讨论】:

  • 所以我需要更改“上午”到上午,然后继续?
  • 这是一种方式,是的。
【解决方案2】:

从“上午”开始是非标准的,您可以使用 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)

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    相关资源
    最近更新 更多