在使用MATLAB进行时间序列数据处理时,需要对日期/时间进行整理,这篇简单整理一下本人在数据处理中用到的日期函数及用法
1. datetime命令及用法
datetime可以创建一个时间点,例如
T1 = datetime(2001,1,1);
T2 = datetime(2020,12,31);
% 当然,时间点也可以更精确,可以根据需要自行创建
% t = datetime(Y,M,D,H,MI,S); H、MI 和 S(小时、分钟和秒)
% 还可以进行一些格式设置例如,具体格式可以doc datetime查看
T1 = datetime(2001,1,1,0,0,0,'InputFormat','yyyy-MM-dd')
但是有时我们从NC文件或其他文件中读取出的时间往往是一串从某年某日开始计算的天数,可以进行如下处理:
% 这里以许多nc文件惯用的从1900年1月1日起第几天举例
% 方法1:matlab 提供了一种从1900年1月O日起第几天的计算方法
T = datetime(X,'ConvertFrom','excel')
% X使用这种方法时一定要看好数据说明是从哪一天开始的!X是否需要+1
% 方法2:这个方法可以根据需要,自行设置时间的起点
T1 = datetime(1900,1,1);
T = T1 + caldays(X); % 月、年类似calmonths(X),calyears(X)
在进行实际绘图时,时间和数据需要对应,这时需要在起始、结束时间点之间进行差值
% 如果时间分辨率为1天,
T = T1:T2; % 得到2001-2020年逐日的datetime 数组
% 如果时间分辨率为7天,需要用到caldays或calweeks命令,如果是其他间隔只需修改括号内数字即可
T = T1:caldays(7):T2;
T = T1:calweeks(1):T2;
% 如果时间分辨率为1月、1年
T = T1:calmonths(1):T2;
T = T1:calyears(1):T2;
2. datevec命令及其用法
将日期和时间转换为分量向量
将日期datetime 转换为数组。 现有一个datetime数组,有时需要将其转换为[Y,M,D]格式,可以使用如下方法
T1 = datetime(2001,1,1);
TT = datevec(T1); % 返回结果为[2001,1,1,0,0,0]
[y,m,d,h,n,s] = datevec(T1); % 分别存储成不同的变量
- daysact(如果找不到这个命令,记得安装 Financial Toolbox)
命令可以用来计算日期之间的实际天数,之前应该有一个datenum命令,但是我记得只能计算到0000年的天数?
NumDays = daysact(datetime(2001,1,1) , datetime(2020,12,31))
如果懒得安装也不要急~下面的方法也可以计算
T1 = datetime(2001,1,1);
T2 = datetime(2020,12,31);
NumDays = days(T2-T1);
两种方法的计算结果是一样的
4. datestr命令及其用法
将时间转换为字符串,这个命令用的其实也不多,因为他返回的是char格式的数据,matlab本身也不推荐这个命令,可以使用char或者string函数,返回的内容其实差不了多少
d1 = datetime(2001,1,1);
a1 = datestr(d1)
a2 = char(d1)
a3 = string(d1)
a1 = '01-Jan-2001'
a2 = '2001-01-01'
a3 = "2001-01-01"
% a1和a2是char,a3是string
以上就是我在时间序列分析中常用的几个命令,其他命令我在数据处理中很少用到,这里也不列举了,如果有问题可以私信讨论~
495

被折叠的 条评论
为什么被折叠?



