将date从Excel转换为Matlab
我有一系列date和一些相应的值。 Excel中数据的格式是“Custom” dd/mm/yyyy hh:mm
。 当我尝试将这个列转换为Matlab中的数组时,为了将它用作plot的x轴,我使用:
a = datestr(xlsread('filename.xlsx',1,'A:A'), 'dd/mm/yyyy HH:MM');
但是我得到一个空string:0 x 16。
因此我无法使用函数datenum
将其转换为date数组。
我在哪里犯错误? 编辑:从hh:mm传递到HH:MM也不工作。 当我只尝试
a = xlsread('filename.xlsx',1,'A2')
我得到:a = []
根据datestr
的文档,分钟,月份和小时的语法如下:
HH -> Hour in two digits MM -> Minute in two digits mm -> Month in two digits
因此,您必须更改datestr
的调用中的语法。 由于Excel和Matlab之间的序列date数字格式不同,因此必须将693960
中检索到的数字的偏移量693960
xlsread
。
dateval = xlsread('test.xls',1,'A:A') + 693960; datestring = datestr(dateval, 'dd/mm/yyyy HH:MM');
这将读取Excel文件中第一张( 1
)的第一列( A
)。 为了获得更好的性能,您可以明确指定范围(例如'A1:A20'
)。
代码转换…
… 至:
datestring = 22/06/2015 16:00
编辑:下面的代码应该适用于您提供的Excel文件:
% read from file tbl = readtable('data.xls','ReadVariableNames',false); dateval = tbl.(1); dateval = dateval + 693960; datestring = datestr(dateval) % plot with dateticks as x-axis plot(dateval,tbl.(2)) datetick('x','mmm/yy') %datetick('x','dd/mmm/yy') % this is maybe better than only the months
分钟需要用大写字母M来区分它们与月份。 使用a = datestr(xlsread('filename.xlsx',1,'A:A'),'dd / mm / yyyy HH:MM')
编辑:更正了我原来的答案,我混淆了所需的案件。
我试过这个。 它有效,但速度很慢,我不能在最后绘制date。 无论如何:
table= readtable ('filename.xlsx'); dates = table(:,1); dates = table2array (dates); dates = datenum(dates); dates = datestr (dates);