Data
我正在尝试使用此创建时间维度:
t1 = datetime(1901,1,1);
t2 = datetime(2016,12,31);
t = t1:t2;
并使用它创建一个 netCDF 文件
nccreate('prec.nc','Prec',...
'Dimensions',{'time' 42369 'lon' 135 'lat' 129},...
'Format', 'netcdf4');
我试过什么
ncwrite('prec.nc', 'time', t(;
错误信息
Error using cast
Unsupported data type for conversion: 'datetime'.
Error in internal.matlab.imagesci.nc/write (line 778)
scale_factor = cast(1, class(varData));
Error in ncwrite (line 87)
ncObj.write(varName, varData, start, stride);
问题
如何创建可写出到 netCDF 文件的每日时间维度?此转换的正确日期类型是什么?
NetCDF 没有定义存储日期/时间值的单一本机方式,但存在已建立的约定,如此处所述。
有两种策略可以将日期/时间存储到 netCDF 变量中。一种是将其编码为数值和包含参考时间的单位,例如"自 2001-1-1 0:0:0 以来的秒数"或"自 2001-1-1 0:0:0 以来的天数"。另一种是使用标准编码和日历将其存储为字符串。如果有多个日期,则前者更紧凑,并且可以更轻松地计算两个日期之间的间隔。
因此,您可以:
a( 使用datestr
将其转换为字符串值。用于数据交换的传统日期字符串格式是 ISO 8601,您可以在 Matlab 中使用datestr(myDateTime, 'yyyy-mm-ddTHH:MM:SS')
获得。
b( 将其转换为表示自参考"纪元"时间以来的秒或天的数值。我建议使用 Unix 时代,因为 Matlab 已经为此提供了一个方便的转换函数:posixtime(myDateTime)
。然后在 NetCDF 文件中将该变量的单位指定为'seconds since 1970-01-01 00:00:00'
。
在 NetCDF 中编码日期时间之前,您可能希望确保日期时间采用 UTC,这样您就不必担心时区问题。