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

2024-05-18 13:30:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这两个不同的历史是什么?


Tags: oftheimportandatetimeas整数integer
3条回答

也许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

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

相反,方法date.weekday()返回星期日的6,因为它试图匹配更老的time模块的行为。在这个模块中,时间通常用struct_time表示,在这个模块中,struct_time.tm_day使用6表示周日。

正确的问题就变成了。。。为什么当C库的tm结构使用0时,time.struct_time将周日表示为6??

答案是。。。因为它就是这样。自1993年Guido首次签入gmtimelocaltime函数以来,这种行为就一直存在。

圭多不会错的。。。所以你最好问问他。

最初,ISO 8601标准使用1 .. 7表示周一到周日。为了方便起见,稍后允许解释0=Sunday

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

标准是欧洲公约。我想这并不奇怪:P

相关问题 更多 >

    热门问题