我有两个时间向量:
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
。以下是datestr
与V2
格式相同的代码:
V1
答案 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代替。