在MATLAB中用24小时解析日期

时间:2015-08-15 19:42:53

标签: matlab datetime

我有一个包含8760个小时数据行的CSV文件,其中很多都有24:00的时间。似乎MATLAB不允许小时数为24(从0到23)。我无法找到一种方法来解析时间24:00的行。

MATLAB示例(给出错误):

datetime('7/16/02 24:00','InputFormat','MM/dd/yy HH:mm')

R中的相同示例(工作正常,即自动转换为7月17日,0:00):

as.POSIXct("7/16/02 24:00",format="%m/%d/%Y %H:%M")

2 个答案:

答案 0 :(得分:5)

正如上面的评论中所讨论的,对于MATLAB中不同的与日期相关的函数,分钟和小时的格式似乎是不同的。一种可能的解决方案是将datestrdatetime一起使用。

与问题相同的MATLAB示例(现在可以使用):

datetime(datestr('7/16/02 24:00','mm/dd/yy HH:MM'),'InputFormat','MM/dd/yy HH:mm')

结果:

ans = 

   17-Jul-2002 00:00:00

函数datestr自动将日期转换为7月17日0:00,并将其传递给函数datetime

答案 1 :(得分:0)

我曾经遇到过同样的问题,我昨天发布了我的问题:

我正在使用以下代码对MS中的日期时间单元格进行解析 与日期时间格式为(01/05/2019 00:00)的Excel工作表相同 下面的屏幕截图。

clc,clear,close all;
[num1,data] = xlsread('Book_new.xlsx','sheet1','A1:A30');
a=datevec(data,'dd/mm/yyyy HH:MM:SS');
date=datestr(datenum(a),'dd/mm/yyyy');
time=datestr(datenum(a),'HH:MM:SS');
Year=datestr(datenum(a),'yyyy');
mm=datestr(datenum(a),'mm');
dd=datestr(datenum(a),'dd');
yy=datestr(datenum(a),'yyyy');
[status,message] =xlswrite('motasem.xlsx',str2num(yy),'sheet1','A1:A30');
[status,message] =xlswrite('motasem.xlsx',str2num(mm),'sheet1','B1:B30');
[status,message] =xlswrite('motasem.xlsx',str2num(dd),'sheet1','C1:C30');
[status,message] =xlswrite('motasem.xlsx',string(time),'sheet1','D1:D30');

例如,当我运行第一个30读数的代码时(半小时 读数)会给我以下错误:

Error using dtstr2dtvecmx
Failed to convert from text to date number.
Error in datevec (line 123)
            y = dtstr2dtvecmx(t,icu_dtformat);
Error in motasem (line 4)
a=datevec(data,'dd/mm/yyyy HH:MM:SS');

但是当我更改数据范围以避免第一次读取时 包含其工作时间00:00:00并给出以下输出:任何 有建议吗?

有效的新代码正在使用readtable函数,如下所示:

clc,clear,close all;
data = readtable('Book_new.xlsx','Range','A1:A60','ReadVariableNames',false);
A = table2array(data);
yy=datestr(datenum(A),'yyyy');
mm=datestr(datenum(A),'mm');
dd=datestr(datenum(A),'dd');
time=datestr(datenum(A),'HH:MM:SS');
[status,message] =xlswrite('motasem.xlsx',str2num(yy),'sheet1','A1:A30');
[status,message] =xlswrite('motasem.xlsx',str2num(mm),'sheet1','B1:B30');
[status,message] =xlswrite('motasem.xlsx',str2num(dd),'sheet1','C1:C30');
[status,message] =xlswrite('motasem.xlsx',string(time),'sheet1','D1:D30');