将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);