Removing close datetimes from datetime array

5 次查看(过去 30 天)
I have this 5x1 datetime array:
14-May-2020 10:47:18
14-May-2020 10:47:19
14-May-2020 10:47:20
14-May-2020 10:53:36
14-May-2020 10:54:05
I want to remove all datetimes within 2 seconds of another datetime, so in this case I want to remove the second and third datetime '14-May-2020 10:47:19' and '14-May-2020 10:47:20' and keep '14-May-2020 10:47:18'. Is there an easy way to do this?
  2 个评论
Sindar
Sindar 2020-5-15
diff will allow you determine the difference between times, but you haven't fully specified the problem, and some versions are significantly easier. Let's consider this example:
14-May-2020 10:47:18
14-May-2020 10:47:19
14-May-2020 10:47:20
14-May-2020 10:47:21
14-May-2020 10:53:36
14-May-2020 10:54:05
What remains based on various rules:
"remove all datetimes within 2 seconds of another datetime"
14-May-2020 10:53:36
14-May-2020 10:54:05
"remove all datetimes within 2 seconds of the previous datetime"
14-May-2020 10:47:18
14-May-2020 10:53:36
14-May-2020 10:54:05
"remove datetimes -- starting from the beginning -- so that none are within 2 seconds of each other"
14-May-2020 10:47:18
14-May-2020 10:47:21
14-May-2020 10:53:36
14-May-2020 10:54:05
Which one would you like?
Campion Loong
Campion Loong 2020-5-22
If I may take a guess that Sindar's second example (i.e. "remove all datetimes within 2 seconds of the previous datetime") is the desired outcome, I'd do:
>> dt = sort(dt);
>> dt([true; diff(dt) >= seconds(2)]) % the leading TRUE accounts for the first element offset

请先登录,再进行评论。

回答(1 个)

Jalaj Gambhir
Jalaj Gambhir 2020-5-18
编辑:Jalaj Gambhir 2020-5-18
Hi,
The following is one of the way in which you can achieve your task, as pointed out in the comment, "remove all datetimes within 2 seconds of the previous datetime"
DateStrings = {'14-May-2020 10:47:18','14-May-2020 10:47:19','14-May-2020 10:47:20','14-May-2020 10:53:36','14-May-2020 10:54:05', '14-May-2020 10:51:03', '14-May-2020 10:51:05'};
t = datetime(DateStrings,'InputFormat','dd-MMM-yyyy HH:mm:ss');
t = sort(t);
for i=1:length(t)
if ~isnat(t(i))
lower = t(i)+seconds(1);
upper = lower + seconds(2);
t(isbetween(t,lower,upper)) = NaT;
end
end
result = t(~isnat(t));
Hope this helps!

类别

Help CenterFile Exchange 中查找有关 Calendar 的更多信息

产品


版本

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by