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

如何绕过Python datetime的ValueError实现贾拉利历日期转datetime?

解决贾拉利历字符串转datetime的问题

Python标准库的datetime模块仅支持**公历(格里高利历)**的日期规则,而贾拉利历的月份天数与公历不同(例如贾拉利历2月有31天),直接用datetime.strptime解析会触发日期合法性校验,导致day is out of range for month错误,无法直接绕过这个限制。

正确的做法是使用专门处理贾拉利历的第三方库,以下是具体方案:

方案一:使用jdatetime库

jdatetime是Python生态中处理贾拉利历的常用库,步骤如下:

  1. 安装库:
pip install jdatetime
  1. 解析贾拉利历日期并转换为标准datetime对象:
import jdatetime
from datetime import datetime

# 解析贾拉利历字符串
jalali_date = jdatetime.datetime.strptime("1403-02-31", "%Y-%m-%d")

# 转换为公历datetime对象(适配其他数据表的需求)
gregorian_datetime = jalali_date.togregorian()

print(gregorian_datetime)  # 输出对应的公历日期,例如 2024-05-21 00:00:00

如果你的数据表可以接受贾拉利历的日期对象,也可以直接使用jdatetime.datetime实例,它是标准datetime.datetime的子类,大部分场景下兼容。

方案说明

贾拉利历的日期规则:

  • 第1-6个月:每月31天
  • 第7-11个月:每月30天
  • 第12个月:平年29天,闰年30天

标准库datetime无法识别这套规则,因此必须依赖第三方库完成解析,再转换为通用的datetime类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:19:51