【发布时间】:2017-09-23 14:58:49
【问题描述】:
考虑以下示例:
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) 不会导致零填充年份?这种不一致有什么原因吗?
【问题讨论】:
-
这是什么 Python 版本?我在 Python 3.6 中得到“0001-01-01T00:00:00”。
-
%Y匹配Year with century as a decimal number.(即 4 位数字);%y匹配Year without century as a zero-padded decimal number.(但这仍然是 2 位数字)......这不能回答你的问题。但是strptime将能够反转strftime生成的所有内容。 -
@SimeonVisser 这很奇怪,我也在使用 Python 3.6。你的补丁版本是多少?
-
@karlson:我正在运行 Python 3.6.1(v3.6.1:69c0db5050,2017 年 3 月 21 日,01:21:04)。
-
@karlson:是的,但我正在运行 Mac OS X。我认为这是这里的问题:bugs.python.org/issue13305。
标签: python python-3.x datetime