在Python中,使用datetime.strftime()
将星期几显示为整数会显示与使用datetime.weekday()
不同的结果。
>>> import datetime
>>> now = datetime.datetime.now()
>>> now.strftime('%A')
'Sunday'
>>> now.strftime('%w') # Day of the week as an integer.
'0'
>>> now.weekday() # Day of the week as an integer, a different way.
6
使用strftime()
时,字符串格式%w
将星期日作为一周的第一天。对于weekday()
,它是星期一。
为什么这两者有何不同?
答案 0 :(得分:13)
Python的strftime
函数在c库中模拟它。因此,%w
为星期日返回0
的动机完全来自于此。
相比之下,方法date.weekday()
为星期日返回6
,因为它试图匹配较旧的time
模块的行为。在该模块中,时间通常由struct_time
表示,在此范围内,struct_time.tm_day
使用6
来表示星期日。
然后正确的问题变成......为什么time.struct_time
将星期日表示为6
,当C库的tm
结构使用0
??
答案是......因为它确实如此。自Guido于1993年首次检入gmtime
和localtime
函数以来,这种行为一直存在。
Guido也不错......所以你最好问他。
答案 1 :(得分:5)
最初,ISO 8601标准使用1 .. 7
表示周一至周日。为方便起见,稍后允许解释0=Sunday
。
如果您想使用更一致的内容,请尝试使用isoweekday
0=Monday
标准是欧洲公约。我想这并不奇怪:P
答案 2 :(得分:2)
可能weekday
基于区域设置而strftime
不是?因为我有不同的输出:
In [14]: d.strftime("%A")
Out[14]: 'Sunday'
In [15]: d.strftime("%w")
Out[15]: '0'
In [16]: now.weekday()
Out[16]: 0