Datenum Matlab:

时间:2012-01-04 12:39:42

标签: matlab

在我的代码中,我循环使用不同的文本文件来获取经过的时间和温度。然后绘制温度和时间 文本文件包含这样的数据

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.

为什么会发生这种情况的任何建议,我尝试在命令行中使用相同的功能

1 个答案:

答案 0 :(得分:2)

当接收小于24的小时值时,

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)