为什么Python的datetime.strftime('%w')和datetime.weekday()在一周的几天中使用不同的索引?

时间:2011-09-26 04:42:42

标签: python datetime

在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(),它是星期一。

为什么这两者有何不同?

3 个答案:

答案 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年首次检入gmtimelocaltime函数以来,这种行为一直存在。

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