Python 使用 noleap 日历的 Timedelta 算法

Python Timedelta Arithmetic With noleap Calendars

我正在处理时间单位为 "days since 1-1-1850" 的 CMIP5 数据。要在文件中找到我正在使用的当天,我通常只需对 1-1-1850 和我正在使用的数据点的时间值(以天为单位)进行时间增量相加。但是,CMIP5(或至少我正在使用的文件)使用 'noleap' 日历,这意味着所有年份都只有 365 天。

在我目前的情况下,在处理对应于 1980 年 1 月 1 日的数据点时,我将其 47450 天的时间参数添加到 1850 年 1 月 1 日的原始日期。但是,我得到了 12 月的答案1, 1979 因为排除了 1850 年到 1980 年之间的所有 2 月 29 日。一般而言,timedelta 或 datetime 中是否有其他参数处理不包括闰日的日历?

netCDF num2date是你要找的函数:

import netCDF4

ncfile = netCDF4.Dataset('./foo.nc', 'r')
time = ncfile.variables['time'] # note that we do not cast to numpy array yet
time_convert = netCDF4.num2date(time[:], time.units, time.calendar)

请注意,CMIP5 模型没有标准日历,因此在进行此转换时包含 time.calendar 参数很重要。