我需要将 jalali 日历转换为日期时间列,因为在其他表中我需要一个日期列而不是字符串。
列中的字符串值可能如下所示
from datetime import datetime
dt=datetime.strptime("1403-02-31","%Y-%m-%d")
但它给出以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\bazargani.mehdi\AppData\Local\Programs\Python\Python312\Lib\_strptime.py", line 554, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\bazargani.mehdi\AppData\Local\Programs\Python\Python312\Lib\_strptime.py", line 520, in _strptime
julian = datetime_date(year, month, day).toordinal() - \
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: day is out of range for month
很明显,因为二月没有 31 天,但我需要进行上述转换。
有没有办法绕过 python datetime 中的上述错误?
您需要使用
jdatetime
:
import jdatetime
from datetime import datetime
jalali_date_str = "1403-02-31"
try:
jalali_date = jdatetime.date(*map(int, jalali_date_str.split('-')))
gregorian_date = jalali_date.togregorian()
dt = datetime(gregorian_date.year, gregorian_date.month, gregorian_date.day)
print(dt)
except ValueError as e:
print(f"Error converting date: {e}")
返回
2024-05-20 00:00:00