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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:10:31