2016-07-21 4 views
2

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

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

ответ

4

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) 

Обратите внимание, что модели ПССМ5 не имеют стандартный календарь, поэтому time.calendar аргумент важно включить при выполнении этого преобразования.

+1

Такой полезный инструмент, о котором я понятия не имел. Спасибо, @ N1B4! – DJV