将Python的datetime与timedelta转换为IDL脚本求助
将Python时间转换脚本改写为IDL脚本
需求说明
以1800年1月1日0时0分0秒为起始时间,将Timed数组(存储小时数)转换为对应的月份和年份,以下是原Python实现及数据,以及对应的IDL改写版本。
原Python脚本
from datetime import datetime, timedelta hours = list(Timed) start_date = datetime(year=1800, month=1, day=1, hour=0, minute=0, second=0) Months =[] Years =[] for hour in hours: date = start_date + timedelta(hours=hour) Months.append(date.month) Years.append(date.year)
原Timed数据
Timed = [1.52887e+06,1.52959e+06,1.53034e+06,1.53108e+06,1.5318e+06,1.53254e+06,1.53326e+06,1.53401e+06,1.53475e+06,1.53542e+06,1.53617e+06,1.53689e+06,1.53763e+06]
IDL实现方案
IDL中使用儒略日处理日期时间转换,核心依赖JULDAY(转儒略日)和CALDAT(从儒略日转回公历)两个内置函数,实现脚本如下:
; 定义输入的Timed数组(小时数) Timed = [1.52887e+06,1.52959e+06,1.53034e+06,1.53108e+06,1.5318e+06,1.53254e+06,1.53326e+06,1.53401e+06,1.53475e+06,1.53542e+06,1.53617e+06,1.53689e+06,1.53763e+06] ; 计算起始时间(1800-01-01 00:00:00)的儒略日,参数顺序:月, 日, 年, 时, 分, 秒 start_jd = JULDAY(1, 1, 1800, 0, 0, 0) ; 将小时数转换为天数,得到每个时间点的儒略日数组 jd_array = start_jd + Timed / 24.0 ; 初始化存储年份和月份的数组,长度与Timed一致 Years = LonArr(N_ELEMENTS(Timed)) Months = LonArr(N_ELEMENTS(Timed)) ; 循环处理每个时间点,提取年份和月份 FOR i = 0, N_ELEMENTS(Timed) - 1 DO BEGIN CALDAT, jd_array[i], month, day, year, hour, minute, second Years[i] = year Months[i] = month ENDFOR ; 可选:打印结果验证 PRINT, "转换后的年份:", Years PRINT, "转换后的月份:", Months
关键说明
JULDAY:将公历日期转为儒略日,参数顺序为月、日、年、时、分、秒,需注意与Python的参数顺序不同CALDAT:输入儒略日,输出对应的月、日、年、时、分、秒,直接提取所需的年份和月份即可- 由于Timed存储的是小时数,需除以24转换为天数后,再与起始儒略日相加得到目标时间的儒略日
内容的提问来源于stack exchange,提问作者TThoye
相关产品推荐
相关产品推荐

