【问题标题】:Why does the number week of the year start with 1 or 0 depending on the year?为什么一年中的第几周根据年份以 1 或 0 开头?
【发布时间】:2018-01-03 20:38:42
【问题描述】:

为什么一年中的周数在 2017 年以 1 开头,在 2018 年以 0 开头?

Date.strptime('2017-01-01', '%Y-%m-%d').strftime('%Y-%m-%d    %U') #2017-01-01    01
Date.strptime('2018-01-01', '%Y-%m-%d').strftime('%Y-%m-%d    %U') #2018-01-01    00

【问题讨论】:

  • 阅读定义。

标签: ruby iso8601


【解决方案1】:

来自Ruby docs

周数:

YYYY 的第 1 周从星期日或星期一开始(根据 %U%W)。第一周前一年中的日子在第 0 周。

%U - Week number of the year. The week starts with Sunday. (00..53)

因此,Ruby 似乎将“第一周”(第 1 周)标识为从一年中的第一个星期日开始。在此之前发生的任何事情都存在于第 0 周。2017 年恰好从星期日开始,所以第一天从第一周开始。但是,2018 年从星期一开始,因此 2018 年的第 1 周将从 1 月 7 日开始,即一年中的第一个星期日。

【讨论】:

  • FWIW,这与我熟悉的大多数其他日期库相匹配,AFAIK 也与我所在国家的会计法相匹配。
【解决方案2】:

要根据 ISO-8601 显示周数,请使用 %V

# %V - Week number of the week-based year (01..53)    
Date.strptime('2017-01-01', '%Y-%m-%d').strftime('%Y-%m-%d  %V') #2017-01-01  52
Date.strptime('2018-01-01', '%Y-%m-%d').strftime('%Y-%m-%d  %V') #2018-01-01  01

一般:

根据 ISO-8601 标准的周数,从星期一开始。一年中的第一周是包含该年第一个星期四的那一周(='第一个 4 天周')。

https://www.epochconverter.com/weeknumbers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 2023-03-29
    相关资源
    最近更新 更多