Python 通过仅提供月份或仅提供星期几来创建datetime对象

Python 通过仅提供月份或仅提供星期几来创建datetime对象,python,python-3.x,date,datetime,Python,Python 3.x,Date,Datetime,通过仅提供月份,在Python中创建datetime对象将保留月份信息: >>> import datetime >>> datetime.datetime.strptime('Feb', '%b') datetime.datetime(1900, 2, 1, 0, 0) >>> datetime.datetime.strptime('Feb', '%b').strftime('%B') 'February' 由于没有提供年份或日期,Pyt

通过仅提供月份,在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.strtime()
class方法,默认值为1900-01-01T00:00:00.000:格式字符串中未指定的任何组件都将从默认值中提取

和重要部分:

与%U和%W类似,%V仅在以下情况下用于计算: 周和ISO年(%G)以strptime()格式指定 一串还要注意的是%G和%Y不能互换

我猜
%a
属于相同的条件,但未在文档中指定

您可以将
%G
(ISO 8601年)与
%V
(ISO 8601周)一起使用
%a
,然后它应该可以工作:

>>> datetime.datetime.strptime('1900 01 Tue', '%G %V %a').strftime('%Y-%m-%d %a')
'1900-01-02 Tue'

>>> datetime.datetime.strptime('1900 02 Tue', '%G %V %a').strftime('%Y-%m-%d %a')
'1900-01-09 Tue'

我相信这是因为这样可以指定所需的周。

我相信,
datetime
存储年、月、日和时间字段。而一周中的某一天是按需计算的。但这不是你的答案question@Yevhen你是对的,我想这就是为什么
datetime.datetime.strtime(“”,)
起作用并产生
datetime.datetime(1900,1,1,0,0)
。然而,我希望像
“Tue”这样的
ValueError
不能使用,因为它基本上删除了原始信息。