【发布时间】:2016-09-16 13:29:58
【问题描述】:
在我给出的格式中,日期 2014-01-02 将由“20140102”表示。这是使用标准 strptime 正确解析的:
>>> datetime.datetime.strptime("20140102", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
在这种格式中,“201412”不是有效的日期。 docs 表示“%m”指令是“作为零填充十进制数的月份”。它给出了示例“01, 02, ..., 12”。 days 指令“%d”也应该是零填充的。
基于此,我预计“201412”将是这种格式的无效输入,因此会引发 ValueError。相反,它被解释为 2014-01-02:
>>> datetime.datetime.strptime("201412", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
问题是:有没有办法指定“没有严重的零填充”?还是我在这种情况下误解了“零填充”一词?
请注意,问题不在于如何解析这种格式的日期,而在于理解 strptime 的行为。
【问题讨论】:
-
这并没有真正帮助你,但它有点相关(想想
/分隔字段)Parsing non-zero padded timestamp in python -
我认为这取决于函数使用的正则表达式
-
看起来 Python 文档中的一些额外解释会很好。是否有保证,
strptime("2014123", "%Y%m%d")将始终提供datetime(2014, 12, 3, 0, 0)或者可以是datetime(2014, 1, 23, 0, 0)? -
请注意,文档没有说
%m值必须用零填充,它只是说它表示“月份为十进制数”并提供了一个示例表明它可以补零。