按照我给出的格式,日期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的行为。

最佳答案

根据Python跟踪器上的相关issue,示例如下(对此问题进行了一些修改,但是概念是完全相同的):

>>> datetime.datetime.strptime('20141110', '%Y%m%d').isoformat()
'2014-11-10T00:00:00'
>>> datetime.datetime.strptime('20141110', '%Y%m%d%H%M').isoformat()
'2014-01-01T01:00:00'

上面的行为被确定为而不是一个由this comment解释的错误,该错误表示OpenGroup strptime standard符合ojit_a,后者指定“允许但不要求前导零”。

我想解决方法是使用正则表达式或在传递到strptime之前检查字符串的长度是否为8。

关于python - 为什么python的datetime.datetime.strptime ('201412'( '%Y%m%d')没有引发ValueError?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39523968/

10-12 16:54