考虑以下示例(没有很好地编程......):
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 分钟的 delta 并搜索所有差值较大的值。
% 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);