将数据从excel导入matlab

将数据从excel导入matlab,excel,matlab,datetime,Excel,Matlab,Datetime,当我使用'xlsread'命令将时间序列从excel导入matlab时,日期有问题。例如,在我的excel电子表格中,截至2013年12月9日09:12.13的日期/时间转换为41617.37708333330的数字。当我将其导入matlab时,在序列号类型中,它保持不变41617.37708333330,但当我使用命令detest或相应的datevec将其转换为日期字符串或日期向量类型时,它将在 10-Dec-0113 09:03:00或[113 12 10 9 3 0] i、 e.第10天而

当我使用'xlsread'命令将时间序列从excel导入matlab时,日期有问题。例如,在我的excel电子表格中,截至2013年12月9日09:12.13的日期/时间转换为41617.37708333330的数字。当我将其导入matlab时,在序列号类型中,它保持不变41617.37708333330,但当我使用命令detest或相应的datevec将其转换为日期字符串或日期向量类型时,它将在

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

i、 e.第10天而不是第9天,第0113年而不是2013年

有人知道为什么会这样以及如何解决吗

提前感谢您的帮助


John

Matlab使用日期到编号约定,其中1-jan-0000为1,excel使用约定,其中1-jan-1900为1。因此,当您以数字形式读取excel日期时,必须将其从一种约定转换为另一种约定

如果numDate是从excel读取的值,并且您希望将字符串设置为txtDate,请尝试

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

Matlab使用日期到编号约定,其中1-jan-0000为1,excel使用约定,其中1-jan-1900为1。因此,当您以数字形式读取excel日期时,必须将其从一种约定转换为另一种约定

如果numDate是从excel读取的值,并且您希望将字符串设置为txtDate,请尝试

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

注意:Excel同时使用1900年1月1日和1904年1月2日作为基准年,这可以根据每个工作簿进行设置。工作簿中的Date1904属性将指明这一点。参见丹尼尔评论中的链接。另外,如果您有财务工具箱,那么有一个x2mdate函数可以为您进行转换。为了提高效率,您不应该将datenum'1-jan-1900'放在转换表达式中,而应该执行一次,并将其保存在一个持久变量中,以便与遇到的每个Excel日期一起重用;datenum调用非常昂贵,并且可能会影响大型导入。需要注意的是:Excel同时使用1900年1月1日和1904年1月2日作为基准年,并且可以根据每个工作簿进行设置。工作簿中的Date1904属性将指明这一点。参见丹尼尔评论中的链接。另外,如果您有财务工具箱,那么有一个x2mdate函数可以为您进行转换。为了提高效率,您不应该将datenum'1-jan-1900'放在转换表达式中,而应该执行一次,并将其保存在一个持久变量中,以便与遇到的每个Excel日期一起重用;datenum调用非常昂贵,可能会对大型进口产品造成损害。