【发布时间】:2021-02-08 18:51:40
【问题描述】:
在 Python 中通过仅提供月份来创建 datetime 对象会保留月份信息:
>>> import datetime
>>> datetime.datetime.strptime('Feb', '%b')
datetime.datetime(1900, 2, 1, 0, 0)
>>> datetime.datetime.strptime('Feb', '%b').strftime('%B')
'February'
由于没有提供年份或日期,Python 分别使用默认值 1900 和 01,从而生成 datetime.datetime(1900, 2, 1, 0, 0)。
但是,如果提供一周中的某一天:
>>> datetime.datetime.strptime('Tue', '%a')
datetime.datetime(1900, 1, 1, 0, 0)
>>> datetime.datetime.strptime('Tue', '%a').strftime('%A')
'Monday'
我知道1900-01-01 是星期一,但为什么 Python 不创建一个对象 datetime.datetime(1900, 1, 2, 0, 0),它是在 1900-01-01 之后的第一个星期二,类似于第一个示例中的二月?
似乎最初的信息(即那一天是星期二)在没有任何警告或错误的情况下丢失了。通过仅提供月份和仅提供星期几来创建 datetime 对象有根本区别吗?
【问题讨论】:
-
我相信,
datetime存储年、月、日和时间字段。而一周中的哪一天是按需计算的。但这不是您问题的答案 -
@Yevhen 你是对的,我想这就是
datetime.datetime.strptime('', '')工作并导致datetime.datetime(1900, 1, 1, 0, 0)的原因。但我希望有某种ValueError之类的"Tue" cannot be used,因为它基本上删除了原始信息。
标签: python python-3.x date datetime