【问题标题】:Python - strptime ValueError: time data does not match format '%Y/%m/%d'Python - strptime ValueError:时间数据与格式'%Y/%m/%d'不匹配
【发布时间】:2013-09-09 21:54:26
【问题描述】:

我相信我遗漏了一些微不足道的东西。在阅读了有关strptime ValueError 的所有问题后,我觉得格式似乎正确,这是我得到的以下错误

Traceback (most recent call last):
  File "loadScrip.py", line 18, in <module>
    nextDate = datetime.datetime.strptime(date, "%Y/%m/%d")
  File "/usr/lib64/python2.6/_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '20l2/08/25' does not match format '%Y/%m/%d'

我在 Linux x86_64 下使用 Python 2.6.6。任何帮助都感激不尽。

【问题讨论】:

    标签: python datetime strptime


    【解决方案1】:

    您的错误表明您在年份中有包含字母 l(小写 L)而不是数字 1 的数据:

    ValueError: time data '20l2/08/25' does not match format '%Y/%m/%d'
    

    这不是符合请求格式的有效日期;用1 替换l,输入日期就可以了:

    >>> import datetime
    >>> datetime.datetime.strptime('20l2/08/25', "%Y/%m/%d")
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/Users/mj/Development/Libraries/buildout.python/parts/opt/lib/python2.7/_strptime.py", line 325, in _strptime
        (data_string, format))
    ValueError: time data '20l2/08/25' does not match format '%Y/%m/%d'
    >>> datetime.datetime.strptime('2012/08/25', "%Y/%m/%d")
    datetime.datetime(2012, 8, 25, 0, 0)
    

    修正你的输入,格式正确。

    【讨论】:

    • @Martjin:很好的答案,请提出一个问题,我如何从文件中读取日期格式作为日期时间,我的意思是我有一个日期 2016-06-21,我想将其读取为 2016 -06-21 00:00:00 因为格式可以是日期或日期时间,我应该始终将其读取为日期时间。谢谢。
    • @JadChahine:与此处描述的完全一样;在这些字符串上使用datetime.strptime()
    • 是的,但是如果字符串是日期时间并且我使用 %Y/%m/%d ,那么我会收到时间日期与格式不匹配的错误。
    • 好吧,那么您有一个字符串无法被该特定格式字符串解析。确保您有匹配的字符串,或调整您的格式字符串。顺便说一句,这包括换行符或其他空格。
    【解决方案2】:

    下面是使用字符串变量的方法:

    >>> start_day = 2015188
    >>> print start_day
    2015188
    >>> print conv
    time.struct_time(tm_year=2015, tm_mon=7, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=188, tm_isdst=-1)
    >>> conv = time.strptime( str(start_day), "%Y%j" )
    >>> print conv
    time.struct_time(tm_year=2015, tm_mon=7, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=1, tm_yday=188, tm_isdst=-1)
    

    无论出于何种原因,您都必须将字符串变量放入 str() 事物中,而我在网上找到的所有示例都只在引号中显示日期。

    【讨论】:

    • 您需要str,因为您以整数开头 - 这并不能解决 OP 的问题
    猜你喜欢
    • 2022-01-20
    • 2018-03-18
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    相关资源
    最近更新 更多