- 积分
- 18562
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-8-26
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 懒豆豆yo 于 2019-3-26 08:08 编辑
因为要用ERA的nc格式资料,然后就下了一个月的,结果time变量却是“hours since 1900-01-01 00:00:00.0”的,
大概长这样:
1002972
1002978
1002984
1002990
这个问题放在ncl上面应该是很好解决的,但是我不会用ncl,最近一直死磕的是MATLAB,所以想用MATLAB将以上变量转换为常用的公元历表示。
以下是转换程序,简单得很,试了下,没什么问题。
time1=ncread([path,'150-1000.nc'],'time'); %path是提前设置的路径字符串,'150-1000.nc'是自定义的文件名字符串,此时是“hours since 1900-01-011 00:00:00.0”
time2=double(time1);%资料里面是int32的数据格式,因为后面的datestr()命令需要double格式的数据,所以转换了下
time3=time2./24;%变量是小时的,用datenum()计算时就换算成天数的了,能不能用小时的,回头试试,此时是“days since 1900-01-01”
time4=datenum(time3)+datenum(1900,01,01);%这里面,主要是datenum()命令,表示的是从公元0年到给定日期之间所经历的天数,是数字,其中,datenum(1900,01,01) 就是公元0年1月1日到1900年01月01日的天数,而1900年01月01日到数据里面的天数恰恰是我们刚刚通过time变量算出来的变量time3,两者加起来就是datenum()函数可以正确表示的天数了,即从公元0年到数据日期之间所经历的天数
time = datestr(time4);%前面为什么一定需要datenum()可以按照MATLAB里面的定义正确表达呢,就是因为这里要用datestr()命令,将刚刚得到的天数,转化为我们方便识别的公元历表示法
time3 大概长这样
41789
41789.2500000000
41789.5000000000
41789.7500000000
time 长这样,就是我下的资料里看得懂的时间啦
'01-Jun-2014 00:00:00'
'01-Jun-2014 06:00:00'
'01-Jun-2014 12:00:00'
'01-Jun-2014 18:00:00'
原理简单得很,mark一下,就当是苦逼底层科研狗,贴了一晚上发 票后的灵光一现吧
有理解错的地方,欢迎指正,我们一起交流哇
|
|