从时间向量获取信息

时间:2012-03-10 14:32:42

标签: matlab date vector

我有一个温度矢量和日期/时间的单元格数组。我想创建4个变量,其中每个变量代表当天的不同阶段。例如,我需要为09:00 - 15:00,15:00-21:00,21:00-03:00和03:00-09:00之间记录的所有温度创建变量年。

因此,如果每小时记录一年的温度,我将进行8760次测量,我想将其分解为与上述时间相对应的单独变量。

clear all
StartDate = '2011-01-01 00:00';
EndDate = '2011-12-31 23:57';
Resolution = 60;
DateTime=datestr(datenum(StartDate,'yyyy-mm-dd HH:MM'):Resolution/(60*24):...
    datenum(EndDate,'yyyy-mm-dd HH:MM'),'yyyy-mm-dd HH:MM');
DateTime=cellstr(DateTime);
data = 1 + (20-1).*rand(8760,1);

所以,最后我会得到一个变量,它的温度介于全年每天的温度之间。

目前我正在使用datevec将DateTime转换为向量,然后使用:

P1{i}( not(  3 <= DateVector(:,4) & DateVector(:,4) < 9 ) ) = nan;

指定一天中的不同时间。这是完成这项任务的最佳方法吗?

1 个答案:

答案 0 :(得分:0)

我会尽可能长时间地将你的时间向量作为一个简单的数字,直到你真的需要创建一个显示。

所以我会替换:

DateTime=datestr(datenum(StartDate,'yyyy-mm-dd HH:MM'):Resolution/(60*24):...
    datenum(EndDate,'yyyy-mm-dd HH:MM'),'yyyy-mm-dd HH:MM');
DateTime=cellstr(DateTime);

使用:

DateTime = (datenum(StartDate,'yyyy-mm-dd HH:MM'):Resolution/(60*24):datenum(EndDate,'yyyy-mm-dd HH:MM');

也许我会预先计算时间,如

Time = mod(DateTime,1)

然后在一天的特定时间内找到所有测量值:

%Between 12:00 and 15:00
currentLimits = [12 15]/24;  %Two times in units of days    
mask =Time >=currentLimits(1)  &  Time >=currentLimits(1);
currentTemperatures = data(mask);

您还可以使用日期向量代替日期数字。使用字符串会慢很多,并没有真正增加很多价值。