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

9 次查看(过去 30 天)
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 个评论
Stephen23
Stephen23 2024-6-21
编辑:Stephen23 2024-6-21

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 2024-6-21
编辑:Sim 2024-6-21
Thanks a lot! I think I found that kind of solution at the same moment you wrote it :-)
I used:
dateshift(B, 'start', 'day');

请先登录,再进行评论。

采纳的回答

Benjamin Kraus
Benjamin Kraus 2024-6-21
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

更多回答(1 个)

Sim
Sim 2024-6-21
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

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by