在MATLAB中从两个不同的时间向量中提取特定时间点

时间:2018-03-26 12:28:03

标签: matlab matlab-figure

我有两个时间向量:

V1 = ['02-Feb-2018 08:23:42' '02-Feb-2018 08:24:42'.... '02-Feb-2018 09:10:42']
V2 = [' 8:35 AM' ' 8:36 AM'...' 9:01 AM'].

现在,我想确定t0的开始(tend)和结束点(V2)的索引(在这种情况下为t0 = '8:35 AM'和{{1}在tend = '9:01 AM'中初始化一个向量V1(长度为V3),其中包含V1和tend之间的'1',以及其他t0时间点。由于'0'v1格式不同,我不知道如何在此使用V2。以下是datestrV2格式相同的代码:

V1

1 个答案:

答案 0 :(得分:1)

我建议在这里使用datetime而不是datenum。虽然可以使datenum成功运行,但使用datetime为我们提供了一组更有帮助的方法,并使我们能够更轻松地将V2的值标准化为{{1}的日期}}。一种方法从V1获取日期并将它们分配给V1,这允许使用开始和结束时间进行直接逻辑比较。

例如:

V2

返回:

V1 = ["02-Feb-2018 08:23:42"; "02-Feb-2018 08:24:42"; "02-Feb-2018 08:45:15"; "02-Feb-2018 09:10:42"];
V2 = ["8:35 AM"; "8:36 AM"; "9:01 AM"];

% Convert to datetime
d1 = datetime(V1);
d2 = datetime(V2, 'InputFormat', 'hh:mm a');  % Will assign today for date

% Assume all dates in V1 & V2 are the same
[y, m, d] = ymd(d1(1));  % Extract year, month, day from d1
[d2.Year, d2.Month, d2.Day] = deal(y, m, d);  % Set date of d2 to that of d1

% Find min/max of d2
t_0 = min(d2);
t_end = max(d2);

% Generate V3
V3 = zeros(size(V1));
V3((d1 >= t_0 & d1 <= t_end)) = 1;

正如所料。

请注意,我已添加>> V3.' ans = 0 0 1 0 的时间戳,该时间戳位于V1生成的时间范围内,而您的原始示例并非如此。我还使用strings(在R2016b中引入)的数组来避免空格填充字符数组。如果您使用旧版本的MATLAB,则应使用cell array代替。