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

Python代码错误返回上月最后一天,如何获取Jalali及公历当月最后一天?

问题分析与解决方案

错误原因

你的代码逻辑存在问题:计算当月最后一天时,错误地使用了当月1日减去1天,这只会得到上月的最后一天。正确的逻辑应该是获取下一个月的1日,再减去1天,这样才能得到当前月的最后一天。

修正后的代码

波斯历(Jalali)处理

import jdatetime

# 只调用一次now(),避免多次调用可能产生的微小时间差
jnow = jdatetime.datetime.now()
# 计算下一个月的年份和月份
next_jyear = jnow.year if jnow.month < 12 else jnow.year + 1
next_jmonth = jnow.month + 1 if jnow.month < 12 else 1
# 取下一个月1日,减1天得到当前月最后一天
jlast_day_of_current_month = jdatetime.date(next_jyear, next_jmonth, 1) - jdatetime.timedelta(days=1)
print(jlast_day_of_current_month)  # 输出: 1402-11-30

公历处理

import datetime

# 同样只调用一次now()
dnow = datetime.datetime.now()
# 计算下一个月的年份和月份
next_dyear = dnow.year if dnow.month < 12 else dnow.year + 1
next_dmonth = dnow.month + 1 if dnow.month < 12 else 1
# 取下一个月1日,减1天得到当前月最后一天
dlast_day_of_current_month = datetime.date(next_dyear, next_dmonth, 1) - datetime.timedelta(days=1)
print(dlast_day_of_current_month)  # 输出: 2024-02-29

代码说明

  • 只调用一次now():避免多次调用时因系统时间变化产生的不一致(比如刚好跨秒/分的情况)
  • 计算下一月的年月:通过判断当前月份是否为12月,来处理跨年的情况
  • 核心逻辑:下一月1日减1天,即为当前月的最后一天

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:00:21