`datetime.strftime`和`datetime.strptime`对%Y的解释不同
我用下面的语句从一个字符串创建了一个 datetime
对象:
t = datetime.strptime("0023-10-10", "%Y-%m-%d")
然后在我的代码的某个地方,我使用了 t
对象,并用同样的格式字符串调用了 strftime
方法:
t.strftime("%Y-%m-%d")
这导致了一个错误:ValueError: year=23 is before 1900; the datetime strftime() methods require year >= 1900
。
看起来这两个相似的方法对 %Y 输入的验证是不同的。所以我必须做以下操作,以确保不接受像 23
这样的错误年份:
try:
format = "%Y-%m-%d"
t = datetime.strptime("0023-10-10", format)
t.strftime(format)
except ValueError:
...
我在想有没有更好的方法来进行这个验证。
2 个回答
2
你可以简单地检查一下 if t.year < 1900
,如果是的话就返回一个错误。没必要故意去制造一个异常。
4
我喜欢你用 try..except
来验证输入的想法,因为在未来的某个Python版本中,年份小于1000可能会被接受。
这段代码中的评论表明,这个限制仅限于当前Python实现的strftime功能。
在Python 2.7中,年份小于1900时会出现异常,但在Python 3.2中,年份小于1000时会出现异常:
import datetime as dt
format = "%Y-%m-%d"
t = dt.datetime.strptime("0023-10-10", format)
try:
t.strftime(format)
except ValueError as err:
print(err)
打印输出
year=23 is before 1000; the datetime strftime() methods require year >= 1000