我们通常读取的科研数据具有时间维度,因而通常用于数据运算的时候,最常使用的是(2003.567)等双精度格式的年份。本专栏提供了一个将nc文件中提供的时间变量的年-月-日转成-年。但是nc文件提供的time变量通常是以下两种格式:
units = 'hours since 1800-01-01 00:00:0.0'
units = 'days since 1800-1-1 00:00:00'
因此对应第一类的处理方法是:
time = ncread(file,'time');
dt1 = datetime(1800,1,1) + hours(time);tin = ymd(dt1)
而第二类处理方法:
time = ncread(file,'time');
dt2 = datetime((time)*24*3600, 'ConvertFrom', 'epochtime', 'Epoch', '1800-01-01');tin = ymd(dt2)
然后可以得到[年-月-日]的tin变量,接着按以下的提供的matlab函数计算即可:
function tout=nc_time_transfer(tin)
% inout:[year,month,day]
% output:year.xxx
month_daylist = [31,28,31,30,31,30,31,31,30,31,30,31];
month_daylist_leap = [31,29,31,30,31,30,31,31,30,31,30,31];
year = tin(1);
month = tin(2);
day = tin(3);
if leapyear(year) == 1
dayinyear = sum( month_daylist_leap(1:month-1) ) + day;
tout = year + dayinyear/366;
else
dayinyear = sum( month_daylist(1:month-1) ) + day;
tout = year + dayinyear/365;
end
% tout
function iyn = leapyear( year )
if ( mod(year,4) == 0 && mod(year,100) ~= 0 ) || mod(year,400) == 0
iyn = 1;
else
iyn = 0;
end
end
end