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

9 visualizaciones (últimos 30 días)
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 comentarios
Stephen23
Stephen23 el 21 de Jun. de 2024
Editada: Stephen23 el 21 de Jun. de 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 el 21 de Jun. de 2024
Editada: Sim el 21 de Jun. de 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');

Iniciar sesión para comentar.

Respuesta aceptada

Benjamin Kraus
Benjamin Kraus el 21 de Jun. de 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

Más respuestas (1)

Sim
Sim el 21 de Jun. de 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

Categorías

Más información sobre Dates and Time en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by