如何检索从1月1日开始的一年中的周数



所以我有一个shell脚本,它使用SQL查询返回周数:

select TO_CHAR(TO_DATE('01/01/2022','DD/MM/YYYY'),'fmWW') as WEEK from dual;

此查询返回1。(从1月1日开始)

Python代码:我尝试过以下方法,但它返回52而不是1:

week=datetime.date(2022,1,1).isocalendar()[1]

从周一至周日开始的一周

有没有其他方法可以让我从1月1日开始计算每年的周数2022年1月1日我得到1?

所需输出:

Week ending Jan 2 2022 = 1
Week ending Jan 9 2022 = 2
Week ending Jan 16 2022 = 3

有没有其他方法可以让我从1月1日开始获得年份的周数,这样我就可以在2022年1月获得1?

您可以在给定日期使用dt,正如您在问题中所说:

TO_CHAR(dt, 'fmWW')

或者可以使用计算

FLOOR((dt - TRUNC(dt, 'YY'))/7)+1

或者,为了匹配python代码,可以使用获得ISO周

TO_CHAR(dt, 'fmIW')

或者,如果你想从1月1日开始计算周数,并在周一更改周数,那么:

FLOOR((dt - TRUNC(TRUNC(dt, 'YY'), 'IW'))/7)+1

然后查询:

WITH sample_dates (dt) AS (
SELECT DATE '2021-12-30' + LEVEL - 1 FROM DUAL CONNECT BY LEVEL <= 40
)
SELECT dt,
TO_CHAR(dt, 'fmWW') AS week,
TO_CHAR(dt, 'fmIW') AS isoweek,
FLOOR((dt - TRUNC(dt, 'YY'))/7)+1 AS weekfromyearstart,
FLOOR((dt - TRUNC(TRUNC(dt, 'YY'), 'IW'))/7)+1 AS montosunweekfromyearstart
FROM   sample_dates

输出:

2022-01-24年
DT
2021-12-302021-12-3122022-01-0222022-01-082022-01-0922022-01-102022-0112022-01222022-01-1322022-01-142022-0153年22022-01-1832022-02-203年44年3年4年4年
4年4年44年4年5年2022-01-302022-01-31

您使用的是isocalendar(),所以ISO周定义:所以每周都有一个数字(应该与年份一起使用):在这种情况下,您仍然处于2021的最后一周。

我找不到一个简单的解决方案,但你可以使用这个丑陋的技巧:

this_date = datetime.date(2022,1,1)
week = int(this_date.strftime("%W")) + int(this_date.weekday() != 0)

工作原理:python有三周的定义:

%U:一年中的周数(星期日是一周的第一天),用零填充的十进制数表示。新年中第一个星期日之前的所有日子都被视为在第0周。

%W:一年中的周数(星期一为一周的第一天),用零填充小数。新年中第一个星期一之前的所有日子都被视为在第0周。

%V:ISO 8601周,以十进制数表示,星期一为一周的第一天。第01周是包含1月4日的一周。

%W似乎是一个不错的候选者,但它从0开始,直到第一个星期一。

所以我们可以添加+1,但当一年的第一天是星期一时,它就会失败。第二部分只是周一的测试。请记住,布尔值的整数对于False为0,对于True为1。您可能更喜欢使用if else运算符。

如果您喜欢从周日开始计算周数,只需将%W替换为%U即可。

最新更新