【问题标题】:Is the output week number string correct?输出的周数字符串是否正确?
【发布时间】:2019-09-17 20:24:40
【问题描述】:

我正在尝试使用 Python time 模块生成周数字符串,考虑到一周从 Sunday 开始。

如果我对官方documentation的解释是正确的,那么可以通过以下代码实现:

import time 

time.strftime("%U", time.localtime())
>> 37

我的问题是,上面的输出正确吗?考虑到以下细节,输出不应该是 38:

我的时区是 IST (GMT+5:30)

import time

#Year
time.localtime()[0]
>> 2019

#Month
time.localtime()[1]
>> 9

#Day
time.localtime()[2]
>> 18

【问题讨论】:

标签: python time week-number


【解决方案1】:

是的,输出是正确的。第 1 周从 1 月 6 日开始,因为那是 2019 年的第一个星期日。1 月 1 日至 5 日是第 0 周:

>>> time.strftime('%U', time.strptime("2019-1-1", "%Y-%m-%d"))
'00'
>>> time.strftime('%U', time.strptime("2019-1-6", "%Y-%m-%d"))
'01'

这在文档中有介绍:

新年第一个星期天之前的所有日子都被认为是在第 0 周。

您可能正在寻找ISO week date,但请注意,在此系统中,一周的第一天是星期一。

您可以使用带有datetime.date.isocalendar() method 的系统获取周数,或者使用%V 格式化:

>>> time.strftime("%V", time.localtime())
'38'
>>> from datetime import date
>>> date.today().isocalendar()  # returns ISO year, week, and weekday
(2019, 38, 2)
>>> date.today().strftime("%V")
'38'

【讨论】:

  • @jonrsharpe: isocalendar() 使用周数的不同定义
  • 是的,但大概这就是让 OP 感到困惑的原因。
  • @MartijnPieters 感谢您的详细解释。我忽略了它说“第一个星期日之前的新年中的所有日子都被认为是在第 0 周”的部分。
  • @MartijnPieters 另外,我正在寻找 ISO Weeknum 之类的东西,但它从星期日开始,而不是星期一。 ISO 2019 年第 1 周的时间为 2018 年 12 月 31 日至 1 月 6 日(周一至周日)。但是,按照我的惯例,2019 年第 1 周应该是从 2018 年 12 月 30 日到 1 月 5 日(周日到周一)。如何做到这一点?
  • @Newbie92:有很多不同的周编号方案(维基百科说至少有 6[](en.wikipedia.org/wiki/Week#Week_numbering)),我不太确定你真的想要 ISO 周编号方案调整为星期日。我所知道的是,您希望星期从星期日开始,并且您认为今年 1 月 1 日是第 1 周。2019 年 12 月 31 日应该是第几周?在 ISO 日历中,这是 2020 年的第 1 周。还是应该是 2019 年的第 53 周?确定第一周和最后一周的规则是什么?
【解决方案2】:

这是正确的,因为您从第一个星期日开始数。

%U - 当年的周数,从第一个星期日开始作为第一周的第一天 https://www.tutorialspoint.com/python/time_strftime.htm

【讨论】:

    【解决方案3】:

    没错。由于新年中第一个星期日之前的所有日子都被认为是在第 0 周(01/01 到 01/05),因此本周是第 37 周。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      相关资源
      最近更新 更多