You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pendulum模块返回错误周数求助:获取正确月内周数

获取正确的月内周数问题解决方案

哦,这个坑我之前踩过!你得到-48这种奇怪的负数,主要是因为两个点:一是pendulum的week_of_month属性是基于ISO周规则计算的(周一为周起始,且周数会跨月/跨年),二是你的代码里通过date.today()转字符串再解析的方式,可能导致时区不匹配,进而引发了异常的周数计算。

方法一:用Pendulum原生方法获取正确ISO周的月内周数

直接用Pendulum自带的日期方法,避免时区转换的问题:

import pendulum

# 获取当前本地时区的日期时间(推荐)
dt = pendulum.today()
# 或者指定时区,比如东八区
# dt = pendulum.today(tz='Asia/Shanghai')

week = dt.week_of_month

print(dt)
print(week)

这样对于2023-01-19来说,会得到正确的3(因为ISO周中,1月2日是当月第一周的周一,19日属于第三周)。

方法二:自定义“自然周”计算(按每月1号为第一周起始)

如果你想要的不是ISO周规则,而是从每月1号开始,每7天算一周的逻辑(比如1号-7号是第1周,8号-14号是第2周),可以手动计算:

import pendulum

dt = pendulum.today()
# 计算自然周数
week = (dt.day - 1) // 7 + 1

print(dt)
print(week)

这种方式下,2023-01-19会得到3(16号-22号为第3周)。

为什么你的原代码出错?

原代码里pendulum.parse(str(date.today()))会把本地日期转成字符串后,默认按UTC时区解析,这可能导致日期的“实际归属周”发生偏移(比如本地是东八区的话,date.today()的2023-01-19在UTC时区其实是2023-01-18的下午),加上旧版本Pendulum的ISO周计算可能存在的bug,就出现了-48这种异常值。用Pendulum原生的today()方法可以完美规避这个问题。

内容的提问来源于stack exchange,提问作者kalesh cv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 16:35:13