考慮下面的例子(沒有很好的編程...):
clc; clear;
time = {};
% Sample time series
for d = 1:3
for h = 0:23
if h < 10
hstr = ['0' num2str(h)];
else
hstr = num2str(h);
end
for m = 0:59
if m < 10
mstr = ['0' num2str(m)];
else
mstr = num2str(m);
end
time{end+1,1} = ['0' num2str(d) '-01-2016 ' hstr ':' mstr ':00'];
end
end
end
% Missing times
time([10 2000]) = [];
input_format = 'dd-MM-yyyy HH:mm:ss';
num = datenum(datetime(time,'InputFormat',input_format));
現在,您可以查看特定日期的值,如果你計算出一天的開始的datenum
和的開始明天。中間的所有值都屬於選定日期。
% Check for second day (1.)
test1 = '02-01-2016 00:00:00';
test2 = '03-01-2016 00:00:00';
num1 = datenum(datetime(test1,'InputFormat',input_format));
num2 = datenum(datetime(test2,'InputFormat',input_format));
% Find all in one day
r = num>=num1 & num<num2;
day2 = num(r); % Only the values from the second day.
尋找失蹤的值,就可以計算出1分鐘三角洲和搜索所有值,其中的差別是較大的。
% Find missing values (2.)
test1 = '01-01-2016 00:00:00';
test2 = '01-01-2016 00:01:00';
num1 = datenum(datetime(test1,'InputFormat',input_format));
num2 = datenum(datetime(test2,'InputFormat',input_format));
delta = num2-num1;
% Find missing values
pos = find(diff(num) > delta*1.1); % To avoid numerical issues
注意,如果秒的所有相同的值被使用(如在我的情況00
)第二個例子中才起作用。
編輯:
另一個選擇是直接使用datetime
結構。
dates = datetime(time,'InputFormat',input_format);
% 1.
day2 = find([dates.Day] == 2);
% 2.
pos = find(diff([dates.Minute])>1);