Поскольку вы извлекаете time
из переменных в time=f.variables['time'][:]
, он потеряет связанную с ним единицу (время, как говорится в ошибке, является просто замаскированным массивом). То, что вам нужно указать num2date()
, это variables['time'].units
, например,
from netCDF4 import date2num, num2date, Dataset
file = ... # your nc file
with Dataset(file) as root:
time = root.variables['time'][:]
dates = num2date(time, root.variables['time'].units)
## directly get UTC hours here:
# unit_utchours = root.variables['time'].units.replace('seconds', 'hours')
## would e.g. be 'hours since 2019-08-15 00:00:00'
# utc_hours = date2num(dates, unit_utchours)
# check:
print(dates[0].strftime('%Y%m%d%H'))
# e.g. prints 2019081516
... чтобы получить даты в виде числа, вы можете, например, сделать
num_dates = [int(d.strftime('%Y%m%d%H')) for d in dates]
# replace int with float if you need floating point numbers etc.
.. . чтобы узнать даты в UTC, см. раздел с комментариями в первом блоке кода. Поскольку массив дат содержит объекты типа datetime.datetime , вы также можете сделать
utc_hours = [d.hour+(d.minute/60)+(d.second/3600) for d in dates]