考虑以下示例:
from datetime import datetime
FMT = "%Y-%m-%dT%H:%M:%S"
original_date = datetime(1,1,1)
s = original_date.strftime(FMT) # This is '1-01-01T00:00:00'
当我现在尝试将该字符串解析为具有我用于序列化的确切格式的日期时间时,会向我抛出ValueError
:
datetime.strptime(s, FMT)
ValueError:时间数据' 1-01-01T00:00:00'不符合格式'%Y-%m-%dT%H:%M:%S'
然而
datetime.strptime('0001-01-01T00:00:00', FMT)
按预期工作。
我希望strptime
能够处理strftime
生成的任何内容。我一直认为这些功能是彼此相反的。
为什么original_date.strftime(FMT)
不会导致零填充年份?这种不一致是否有任何原因?
答案 0 :(得分:4)
%Y
的结果在各个平台上并不一致。在Mac OS X上,它将返回0001
但在Linux上它将返回1
。
在Linux上,您可以使用%4Y
生成0001
年份值。
这是一个已知问题:https://bugs.python.org/issue13305。
strftime()
和strptime()
的文档也声明:
支持的全套格式代码因平台而异,因为Python调用平台C库的strftime()函数,并且平台变体很常见。要查看平台支持的完整格式代码集,请参阅strftime(3)文档。