在我的代码中,我循环使用不同的文本文件来获取经过的时间和温度。然后绘制温度和时间 文本文件包含这样的数据
Date; Time; Temp °C
06.12.2011; 10:35:11;-24.13
06.12.2011; 10:36:34;-24.00
06.12.2011; 10:37:56;-23.88
.
.
.
.
header=fgetl(fid);
data=textscan(fid,'%s','delimiter',';');
fclose(fid);
data=data{:};
day=data(1:3:end);
hour=data(2:3:end);
temp=str2double(data(3:3:end));
time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0);
timen=datenum(time,'dd.mm.yyyy HH:MM:SS');
seconds=timen*86400/60;
plot(seconds-seconds(1),temp);
xlabel('Time(mins)');
ylabel('Temp °C');
但是现在当文本文件中经过的时间超过24小时(温度读数持续超过一天)时,datenum会出错
Error using ==> dtstr2dtnummx
Failed on converting date string to date number.
为什么会发生这种情况的任何建议,我尝试在命令行中使用相同的功能
答案 0 :(得分:2)
datenum
对我没有失败。例如:
>> time = '06.12.2011 53:31:11';
>> timen=datenum(time,'dd.mm.yyyy HH:MM:SS');
>> datestr(timen,'dd.mm.yyyy HH:MM:SS')
ans =
08.12.2011 05:31:11
然而,在尝试运行代码时,我确实得到了相同的错误,但是在有两个带有相同时间戳的观察的情况下。这是因为行:
time=cellfun(@(x) sprintf('%s %s',day{strcmpi(hour,x)},x),hour,'uniformoutput',0);
会连接day
的多个值和hour
的一个值,从而生成无效的时间字符串,例如'07.12.2011 07.12.201110:36:11 '
由于您希望每个观察值time
一个值(而不是每个unique(hour)
一个),我建议将time
计算为
time = strcat(day,{' '},hour)