A (simple) way to use ismember between datetime arrays with different formats

9 Ansichten (letzte 30 Tage)
Is there a (simple) way to use ismember between datetime arrays with different formats?
In the following example, I want to find the dates that are present both in A and in B, regardless the time (i.e. hours, minutes, seconds):
% Input
A = datetime(...
['19-Jun-2023',
'20-Jun-2023',
'21-Jun-2023',
'22-Jun-2023',
'23-Jun-2023',
'24-Jun-2023',
'25-Jun-2023']);
tmp = [{'23-Jun-2023 19:00:00'}
{'24-Jun-2023 16:00:00'}
{'24-Jun-2023 11:00:00'}
{'19-Jun-2023 16:00:00'}
{'20-Jun-2023 10:00:00'}
{'21-Jun-2023 10:00:00'}
{'22-Jun-2023 09:00:00'}
{'23-Jun-2023 14:00:00'}
{'19-Jun-2023 17:00:00'}
{'20-Jun-2023 11:00:00'}
{'21-Jun-2023 17:00:00'}
{'22-Jun-2023 15:00:00'}
{'23-Jun-2023 06:00:00'}
{'24-Jun-2023 11:00:00'}
{'25-Jun-2023 19:00:00'}
{'20-Jun-2023 11:00:00'}
{'21-Jun-2023 09:00:00'}
{'23-Jun-2023 12:00:00'}
{'25-Jun-2023 17:00:00'}
{'23-Jun-2023 12:00:00'}
{'22-Jun-2023 07:00:00'}];
B = datetime(tmp, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss');
ismember(A,B)
ans = 7x1 logical array
0 0 0 0 0 0 0
  2 Kommentare
Stephen23
Stephen23 am 21 Jun. 2024
Bearbeitet: Stephen23 am 21 Jun. 2024

The format is completely irrelevant. What matters is the date and time. If you want to ignore the time-of-day then use DATESHIFT before calling ISMEMBER.

Sim
Sim am 21 Jun. 2024
Bearbeitet: Sim am 21 Jun. 2024
Thanks a lot! I think I found that kind of solution at the same moment you wrote it :-)
I used:
dateshift(B, 'start', 'day');

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Benjamin Kraus
Benjamin Kraus am 21 Jun. 2024
I think the function you are looking for is dateshift.
A = datetime(...
['19-Jun-2023',
'20-Jun-2023',
'21-Jun-2023',
'22-Jun-2023',
'23-Jun-2023',
'24-Jun-2023',
'25-Jun-2023']);
tmp = [{'23-Jun-2023 19:00:00'}
{'24-Jun-2023 16:00:00'}
{'24-Jun-2023 11:00:00'}
{'19-Jun-2023 16:00:00'}
{'20-Jun-2023 10:00:00'}
{'21-Jun-2023 10:00:00'}
{'22-Jun-2023 09:00:00'}
{'23-Jun-2023 14:00:00'}
{'19-Jun-2023 17:00:00'}
{'20-Jun-2023 11:00:00'}
{'21-Jun-2023 17:00:00'}
{'22-Jun-2023 15:00:00'}
{'23-Jun-2023 06:00:00'}
{'24-Jun-2023 11:00:00'}
{'25-Jun-2023 19:00:00'}
{'20-Jun-2023 11:00:00'}
{'21-Jun-2023 09:00:00'}
{'23-Jun-2023 12:00:00'}
{'25-Jun-2023 17:00:00'}
{'23-Jun-2023 12:00:00'}
{'22-Jun-2023 07:00:00'}];
B = datetime(tmp, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss');
ismember(A,dateshift(B,'start','day'))
ans = 7x1 logical array
1 1 1 1 1 1 1

Weitere Antworten (1)

Sim
Sim am 21 Jun. 2024
Maybe I found a way, but I am not sure about "dateshift(B, 'start', 'day')":
% Input
A = datetime(...
['19-Jun-2023',
'20-Jun-2023',
'21-Jun-2023',
'22-Jun-2023',
'23-Jun-2023',
'24-Jun-2023',
'25-Jun-2023']);
tmp = [{'23-Jun-2023 19:00:00'}
{'24-Jun-2023 16:00:00'}
{'24-Jun-2023 11:00:00'}
{'19-Jun-2023 16:00:00'}
{'20-Jun-2023 10:00:00'}
{'21-Jun-2023 10:00:00'}
{'22-Jun-2023 09:00:00'}
{'23-Jun-2023 14:00:00'}
{'19-Jun-2023 17:00:00'}
{'20-Jun-2023 11:00:00'}
{'21-Jun-2023 17:00:00'}
{'22-Jun-2023 15:00:00'}
{'23-Jun-2023 06:00:00'}
{'24-Jun-2023 11:00:00'}
{'25-Jun-2023 19:00:00'}
{'20-Jun-2023 11:00:00'}
{'21-Jun-2023 09:00:00'}
{'23-Jun-2023 12:00:00'}
{'25-Jun-2023 17:00:00'}
{'23-Jun-2023 12:00:00'}
{'22-Jun-2023 07:00:00'}];
% Solution
B = datetime(tmp, 'InputFormat', 'dd-MMM-yyyy HH:mm:ss','Format', 'dd-MMM-yyyy');
B2 = dateshift(B, 'start', 'day');
ismember(B2,A)
ans = 21x1 logical array
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Kategorien

Mehr zu Dates and Time finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by