如何以正确的格式创建时间以导出到 MATLAB 中的 netCDF 文件?



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,这样您就不必担心时区问题。

相关内容

  • 没有找到相关文章

最新更新