Python Netcdf数据集从开始时间到utc小时的秒数转换

Python Netcdf数据集从开始时间到utc小时的秒数转换,python,time,netcdf4,Python,Time,Netcdf4,我正在使用netcdf格式代码,我需要将开始时间(2016-01-01 00:00:00.0)的秒数转换为UTC时间。我对这一切都很陌生,所以我真的很挣扎 我已尝试使用netCDF4中的num2date 来自netCDF4导入日期2num、num2日期、数据集 时间=f.变量['time'][:] 日期=netCDF4.num2日期(时间[:],时间单位) 打印(日期中日期的dates.strftime(“%Y%m%d%H”) AttributeError:“MaskedArray”对象没有属

我正在使用netcdf格式代码,我需要将开始时间(2016-01-01 00:00:00.0)的秒数转换为UTC时间。我对这一切都很陌生,所以我真的很挣扎

我已尝试使用
netCDF4
中的
num2date

来自netCDF4导入日期2num、num2日期、数据集
时间=f.变量['time'][:]
日期=netCDF4.num2日期(时间[:],时间单位)
打印(日期中日期的dates.strftime(“%Y%m%d%H”)
AttributeError:“MaskedArray”对象没有属性“units”


由于从
time=f.variables['time'][:]
中的变量中提取
time
,它将丢失其关联的单位(正如错误所说,时间只是一个屏蔽数组)。 您必须输入到
num2date()
的是
变量['time']

来自netCDF4导入日期2num、num2日期、数据集
文件=…#您的nc文件
将数据集(文件)作为根:
时间=根。变量['time'][:]
dates=num2date(时间,根变量['time'].单位)
##直接在此处获取UTC小时数:
#unit\u utchours=root.variables['time'].units.replace('seconds','hours'))
##例如,“2019-08-15 00:00:00后的小时数”
#utc小时=date2num(日期、单位)
#检查:
打印(日期[0]。strftime(“%Y%m%d%H”))
#例如,印刷品2019081516
…要以数字形式获取日期,您可以

num_dates=[int(d.strftime(“%Y%m%d%H”)表示d个输入日期]
#如果需要浮点数等,请将int替换为float。
…要以UTC小时为单位获取日期,请参阅第一个代码块中的注释部分。由于dates数组包含类型为的对象,因此也可以

utc_hours = [d.hour+(d.minute/60)+(d.second/3600) for d in dates]

由于从
time=f.variables['time'][:]
中的变量中提取
time
,它将丢失其关联的单位(正如错误所说,时间只是一个屏蔽数组)。 您必须输入到
num2date()
的是
变量['time']

来自netCDF4导入日期2num、num2日期、数据集
文件=…#您的nc文件
将数据集(文件)作为根:
时间=根。变量['time'][:]
dates=num2date(时间,根变量['time'].单位)
##直接在此处获取UTC小时数:
#unit\u utchours=root.variables['time'].units.replace('seconds','hours'))
##例如,“2019-08-15 00:00:00后的小时数”
#utc小时=date2num(日期、单位)
#检查:
打印(日期[0]。strftime(“%Y%m%d%H”))
#例如,印刷品2019081516
…要以数字形式获取日期,您可以

num_dates=[int(d.strftime(“%Y%m%d%H”)表示d个输入日期]
#如果需要浮点数等,请将int替换为float。
…要以UTC小时为单位获取日期,请参阅第一个代码块中的注释部分。由于dates数组包含类型为的对象,因此也可以

utc_hours = [d.hour+(d.minute/60)+(d.second/3600) for d in dates]

刚刚发现一个非常类似的问题已经得到了回答。当我这样做时,我得到了这个错误'KeyError:float64 time(time)standard_name:time units:seconds from 2016-01-01 00:00:00.0 UTC unlimited dimensions:time current shape=(103384,)filling on,默认值为9.9692099968386869E+36',哪一行抛出了错误<代码>时间=…
或日期=…
?如果它是第二个,你可以试着使用时间。数据它的时间=…我想这可能与它是一个浮点有关,但我真的不确定。。。如果它确实是这一行,那么错误也应该被抛出到你在问题中发布的代码版本中(在
time=f.variables['time'][:]
)。顺便说一句,浮点格式很好。刚刚发现一个非常类似的问题已经得到了回答。当我这样做时,我得到了这个错误'KeyError:float64时间(时间)标准_名称:时间单位:自2016-01-01 00:00:00.0 UTC无限制维度:时间当前形状=(103384,)填充,默认值_FillValue为9.9692099668386869E+36使用了“哪一行抛出错误?”<代码>时间=…或日期=…?如果它是第二个,你可以试着使用时间。数据它的时间=…我想这可能与它是一个浮点有关,但我真的不确定。。。如果它确实是这一行,那么错误也应该被抛出到你在问题中发布的代码版本中(在
time=f.variables['time'][:]
)。顺便说一句,浮点格式很好。