2014-03-13 127 views
2

我使用'xlsread'命令将时间序列从excel导入到matlab中的日期有问题。例如,在我的Excel电子表格中,日期/时间截至2013年12月9日09:03(2013年12月9日)的翻译次数等于41617.37708333330。当我将它导入到matlab中时,它的序列日期号码类型与41617.37708333330保持一致,但是当我将它转换为日期字符串或日期向量类型时(使用命令detester或datevec),它将转换为从excel导入日期到matlab

10-Dec- 0113 09:03:00或[113 12 10 9 3 0]

即一天后(10而不是9)和不同的一年(0113而不是2013)。

有人知道为什么是这种情况,以及如何解决它?

非常感谢您的帮助。

约翰

+1

http://www.mathworks.de/de/help/matlab/import_export/when-to -Exvert-dates-from-excel-files.html – Daniel

回答

3

Matlab的使用日期到数字会议,其中1-JAN-0000是1,和Excel使用惯例,其中1-JAN-1900是1.所以,当你在Excel的日期为已读一个数字,你必须将它从一个惯例转换到另一个惯例。

如果numDate,那么此项是从Excel中读取的值,和你想的字符串txtDate,尝试

txtDate=datestr(numDate+datenum('1-jan-1900')-1) 
+1

需要注意的是:Excel使用1900年1月1日和1904年1月2日两者作为其基准年,并且这可以在每个工作簿的基础上进行设置。工作簿中的Date1904属性将指出这一点。请参阅Daniel评论中的链接。此外,如果您拥有金融工具箱,则有一个'x2mdate'函数可以为您进行转换。为了提高效率,不要在转换表达式中放入'datenum('1-jan-1900')',你应该这样做一次,并将其存储在一个持久变量中,以便在遇到的每个Excel日期重用。 'datenum()'调用很昂贵,并且可能会在大量导入时受到影响。 –