Removing close datetimes from datetime array

12 views (last 30 days)
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?
Campion Loong
Campion Loong on 22 May 2020
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

Sign in to comment.

Answers (1)

Jalaj Gambhir
Jalaj Gambhir on 18 May 2020
Edited: Jalaj Gambhir on 18 May 2020
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;
result = t(~isnat(t));
Hope this helps!




Community Treasure Hunt

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

Start Hunting!

Translated by