Арифметика Python Timedelta с календарями noleap

Я работаю с данными CMIP5, которые имеют единицы времени «дни с 1-1-1850». Чтобы найти текущий день, с которым я работаю в файле, я обычно просто добавляю временную дельту от 1-1-1850 и значение времени (в днях) для точки данных, с которой я работаю. Однако CMIP5 (или, по крайней мере, файл, который я использую) использует календарь «без скачков», что означает, что все годы составляют всего 365 дней.

В моем текущем случае, имея дело с точкой данных, соответствующей 1 января 1980 г., я добавляю аргумент времени 47450 дней к исходной дате 1 января 1850 г. Однако я получаю ответ от 1 декабря 1979 г., потому что все 29 февраля между 1850 и 1980 годами исключены. Есть ли дополнительный аргумент в timedelta или datetime в целом, который касается календарей, исключающих високосные дни?


person DJV    schedule 21.07.2016    source источник


Ответы (1)


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.

person N1B4    schedule 21.07.2016
comment
Такой полезный инструмент, о котором я понятия не имел. Спасибо, @N1B4! - person DJV; 21.07.2016