Netcdf 数据集从开始时间到 utc 时间的秒数转换
Netcdf dataset conversion from seconds from starting time to utc hours
我正在使用 netcdf 格式代码,我需要将时间从开始时间 (2016-01-01 00:00:00.0) 开始的秒数转换为 UTC 时间。我对这一切还很陌生,所以我真的很挣扎!
我尝试使用 netCDF4
中的 num2date
。
from netCDF4 import date2num , num2date, Dataset
time=f.variables['time'][:]
dates=netCDF4.num2date(time[:],time.units)
print(dates.strftime('%Y%m%d%H') for date in dates)
AttributeError: 'MaskedArray' object has no attribute 'units'
由于您从 time=f.variables['time'][:]
中的变量中提取 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 时间的日期,请参阅第一个代码块中的注释部分。由于 dates 数组包含 datetime.datetime 类型的对象,您还可以执行
utc_hours = [d.hour+(d.minute/60)+(d.second/3600) for d in dates]
我正在使用 netcdf 格式代码,我需要将时间从开始时间 (2016-01-01 00:00:00.0) 开始的秒数转换为 UTC 时间。我对这一切还很陌生,所以我真的很挣扎!
我尝试使用 netCDF4
中的 num2date
。
from netCDF4 import date2num , num2date, Dataset
time=f.variables['time'][:]
dates=netCDF4.num2date(time[:],time.units)
print(dates.strftime('%Y%m%d%H') for date in dates)
AttributeError: 'MaskedArray' object has no attribute 'units'
由于您从 time=f.variables['time'][:]
中的变量中提取 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 时间的日期,请参阅第一个代码块中的注释部分。由于 dates 数组包含 datetime.datetime 类型的对象,您还可以执行
utc_hours = [d.hour+(d.minute/60)+(d.second/3600) for d in dates]