【问题标题】:Is there an easy way to read integer time data from a netcdf file using the time-attribute?有没有一种简单的方法可以使用时间属性从 netcdf 文件中读取整数时间数据?
【发布时间】:2014-08-31 00:22:15
【问题描述】:

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

变量属性:

    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 中,可以是字符串,也可以是数字日期.具体来说,我想避免必须解析属性字符串并编写一堆指针和条件来将整数数据转换为实际日期。

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

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

【问题讨论】:

    标签: matlab date attributes netcdf


    【解决方案1】:

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

    您可以通过除以 24 将您的时间变量转换为兼容的 Matlab 日期数字,然后使用 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 帮助文件,您可以随意格式化日期输出。

    【讨论】:

      猜你喜欢
      • 2010-10-30
      • 1970-01-01
      • 2018-04-29
      • 2013-08-24
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      相关资源
      最近更新 更多