我有一个包含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")
答案 0 :(得分:5)
正如上面的评论中所讨论的,对于MATLAB中不同的与日期相关的函数,分钟和小时的格式似乎是不同的。一种可能的解决方案是将datestr
与datetime
一起使用。
与问题相同的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');