【问题标题】:What is the correct date parser format string for the ISO date format?ISO 日期格式的正确日期解析器格式字符串是什么?
【发布时间】:2014-03-09 15:36:20
【问题描述】:

我正在尝试以 ISO 日期格式解析日期,但由于我不明白的原因,我使用的模式不起作用。

从外壳:

>>> s
datetime.date(2014, 1, 3)
>>> str(s)
'2014-01-03'
>>> datetine.strptime(str(s),"%y-%m-%d").date()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
  File "C:\Python27\lib\_strptime.py", line 325, in _strptime
    (date_string, format))
ValueError: time data '2014-01-30' does not match format '%y-%m-$d'

但是2014-01-03 应该与%y-%m-%d 匹配,对吧?为什么会出现此错误?

【问题讨论】:

  • 大写 Y 表示 4 位年份 - 例如:%Y-%m-%d。你到底想达到什么目的?仅将日期的 str rep 转换为日期时间,然后将日期取回,这很奇怪...
  • @JonClements 它应该是答案。小是什么意思?
  • @GrijeshChauhan 小写 y 是 2 位数年份...有关信息,请参阅 this site... 或 official docs
  • @JonClements 谢谢,它几乎和我一直 used in C 一样
  • @GrijeshChauhan 它基于 C 库:)

标签: python date python-2.7 date-parsing


【解决方案1】:

来自docs(强调我的):

%y没有世纪作为零填充十进制数。 00, 01, ..., 99
%Y世纪为十进制数。 1970、1988、2001、2013

因此%y-%m-%d 期待14-01-03 而你有2014-01-03 需要%Y-%m-%d

【讨论】:

    【解决方案2】:

    大小写的区别:

    >>> datetime.datetime.strptime('2014-01-03', '%Y-%m-%d').date()
    datetime.date(2014, 1, 3)
    >>> datetime.datetime.strptime('14-01-03', '%y-%m-%d').date()
    datetime.date(2014, 1, 3)
    

    记录在strptime and strftime behavior

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多