Matlab本身时间处理的函数非常多而且功能强大,主要还是有一咪咪奇怪的行为操作需要记录一下
Matlab时间序列画图
MATLAB很神奇又很奇怪的一点是,画图可以,但是如果想直接画图,数据必须是datetime格式的,如果是cell里面包含的话需要读出来到datetime格式,不可以包含,也就是说cell{i}(1)是datetime格式就需要读取到这个位置
再有一个就是,如果想带着时间轴画等高线的话,必须要将其转换成数字,然后再更改坐标轴的选项
cla(app.UIAxes,'reset') ;%清除窗口否则报错
contourf(app.UIAxes,datenum(keda_time),keda_local_height{1},cell2mat(keda_local_vel),'ShowText','on');
xlabel(app.UIAxes,'时间'); % 为X轴加标签
ylabel(app.UIAxes,'高度(m)'); % 为Y轴加标签
%为了让输出好看,现在求解坐标轴的位置
[~,time_index]=min(abs(rem(datenum(keda_time),1)-0.0833));
time_r = rem(datenum(keda_time),1);
time_num = find(time_r==time_r(time_index));
xticks(app.UIAxes,datenum(keda_time(time_num)));
xticklabels(app.UIAxes,datestr(keda_time(time_num),'mm-dd HH:MM'));
这个是在matlab app里面设计的,所以句柄里面有appa控件,主要是contourf这一句,必须转成数字,然后后面再转回时间字符。还比较麻烦的一点是转成数字了之后每天的时间是看不出来几点的,,得用取余函数,也就是
rem()
进行判断,如果不判断的话,坐标轴就很挤比较难看,取余剩0.0833这个是上午2:00对应的剩余时间
Matlab时间序列读取,生成和格式转换
如果能读取matlab直接生成的数据就直接是datetime格式
s=datenum(time_convert{1});
e=datenum(time_convert{end});
d=30/30/24;%这个原理是啥啊???
T=datestr((s:d:e)','yyyy-mm-dd HH:MM:ss');
GFS_time = datetime(T,'InputFormat','yyyy-MM-dd HH:mm:ss');
大概就是这个样,生成固定时间间隔的时间序列
但是如果一定要读取现有的时间
TF = isstrprop(kedaDataDir(3).name,'digit');
idx = find(TF);
time_0 = '';
for i = 1:8
time_0(i) = kedaDataDir(3).name(idx(i));
end
time_begin = str2num(time_0);
t_duqu = datetime(time_begin,'ConvertFrom','yyyymmdd');
t_char = char(t_duqu);
% DateStrings = {'2014-05-26T13:30-05:00';'2014-08-26T13:30-04:00';'2014-09-26T13:30Z'}
% time_data_date = strcat (t_char,'T','00:00','-','08:00');
time_data_date = strcat (t_char,'00:00');
t = datetime(time_data_date,'InputFormat','yyyy-MM-ddHH:mm');
% t = datetime(time_data_date,'InputFormat','uuuu-MM-dd''T''HH:mmXXX','TimeZone','UTC')
b = cell2mat(a);
T = b(1:biaoji_jiange);
for i = 1:length(T)
time_convert{i} = t+ hours(a{i}+str2num(time_label));
end
这段代码主要实现的是:1.从文件名中读取日期,2:将日期进行字符串和datetime格式之间的转换,3:对时间进行加减法运算;4.带有时区的时间运算
Matlab找到和某个数最接近的数
注意审题,最接近的意思指的是绝对值
[~,I]=min(abs(H(-0.0054))
大概这个样子
除此之外还有find这种函数