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

Mik*_*Lin 20 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
Run Code Online (Sandbox Code Playgroud)

使用时strftime(),字符串格式%w将星期日作为一周的第一天.随着weekday(),它是星期一.

为什么这两者有什么不同?

don*_*mus 13

Python的strftime函数在c库中模拟它.因此,周日%w回归的动机0完全来自于此.

相反,该方法date.weekday()返回一个6for Sunday,因为它试图匹配更旧的time模块的行为.在该模块中,时间通常由a表示,struct_time并且在此范围内,struct_time.tm_day使用a 6来表示星期日.

那么正确的问题就变成了......为什么在C库的结构使用了time.struct_time一个星期日6时将星期日表示为?tm0

答案是......因为它确实如此.自Guido 于1993年首次登记gmtimelocaltime运作以来,这种行为一直存在.

而Guido也不错......所以你最好问他.

  • @ MikeM.Lin Guido是荷兰人.因此"虽然这种方式起初可能并不明显,除非你是荷兰人". (2认同)
  • 我将"Guido"与"Italian"等同起来.这对我来说是错的:-P我来自纽约,如果这让它变得更加可原谅. (2认同)

Foo*_*Bah 5

最初,ISO 8601标准用于1 .. 7代表周一至周日.为方便起见,后来0=Sunday允许解释.

如果您想使用更一致的内容,请尝试使用 isoweekday

0=Monday标准是欧洲公约.我想这并不奇怪:P