有没有一种简单的方法可以使用time-attribute从netcdf文件中读取整数时间数据?

时间:2014-07-09 19:59:32

标签: matlab date attributes netcdf

我正在尝试使用matlab从netCDF文件中读取时间坐标数据。我有一个netCDF文件(我创建的),它有一个时间变量,格式为double,对应于特定时间的小时数(见下文)。

变量属性:

    double time(Time) ;
            time:standard_name = "Time" ;
            time:units = "hours since 2002-01-01 0:0:0" ;
            time:calendar = "proleptic_gregorian" ;

当我使用ncread将时间变量读入matlab时,它只打印出一个整数,例如1。但是,如果我使用" ncdump"为了探索文件,我在其中看到时间变量的坐标时间,例如,2002-01-01 01.

具体来说:" ncdump -t -v time ncfile.nc"

我对matlab比较陌生,我想知道是否有人知道是否有类似或同样简单的方法将此时间变量作为其坐标时间读入matlab,或者作为字符串,或者数字日期。具体来说,我想避免解析属性字符串并编写一堆指针和条件来将整数数据转换为实际日期。

或者,我应该在这些文件中创建一个新的时间变量,它只是一个日期数组作为字符串吗?

非常感谢任何信息! 谢谢!

1 个答案:

答案 0 :(得分:2)

NetCDF将时间存储为epoch的偏移量。从您的变量属性,您的纪元是2002-01-01 0:0:0,时间是从那时起的几小时。 Matlab有一种类似的方法叫做日期数字,虽然它是基于一个时代以来的日子(他们称之为枢轴年)。您应该研究两个函数:datenum和datestr。第一个将字符串转换为日期编号,另一个将日期编号转换为日期字符串。

您可以将时间变量转换为兼容的Matlab日期编号,除以24,然后使用datestr函数将其格式化。这是一个简单的例子:

>> time = [1;2;3;4];
>> datestr(time./24+datenum('2002-01-01 0:0:0'))
ans =
01-Jan-2002 01:00:00
01-Jan-2002 02:00:00
01-Jan-2002 03:00:00
01-Jan-2002 04:00:00

查看与这两个函数相关联的Matlab帮助文件,您可以根据需要设置日期输出格式。