How to account for the day suffix when using datetime to recognise dates in matlab?

5 vues (au cours des 30 derniers jours)
I have a cell array T containing a column of dates from several events, formatted as follows:
17×1 cell array
{'Mon 14th Oct 2019 8:23:48 am' }
{'Thu 10th Oct 2019 8:00:26 am' }
...
{'Tue 3rd Sep 2019 9:03:53 am' }
{'Thu 22nd Aug 2019 6:00:29 am' }
I would like to use datetime to recognize the dates in each cell, however the date contains the suffix for the day of the month ("14th", "10th", etc.), and I couldn't find an option in the input format to account for day suffixes.
If I (manually) remove the suffixes from the days, the following works fine:
datetime(T{1,1},'InputFormat','eeee dd MMMM yyyy hh:mm:ss a')
ans =
datetime
14-Oct-2019 08:23:48
Is there a way to account for the day suffixes (or to automatically remove them before using datetime)?
Thanks
Pedro Viana

Réponse acceptée

Peter Perkins
Peter Perkins le 4 Nov 2019
Pedro, you could put a literal th in the format,
'eeee dd ''th''MMMM yyyy hh:mm:ss a'
and read most of them, and go back and read all the places where you got a NaT, using a literal nd in the format, then again with a literal st. But honestly, the simplest thing is to use replace or strrep to pre-process the text.
Just out of curiosity, where did these timestamps come from?
  1 commentaire
Pedro Viana
Pedro Viana le 5 Nov 2019
Thank you for your help. I ended up writing a looped script to remove the 2-letter suffix after the first number that appears on the string (independently of whether it's "th", "st", "nd", "rd").
for i = 1: size(T,1)
B = regexp(T{i,1},'\d*','Match'); % extract numbers in the string
U = char(T{i,1}); % change to char format
% concatenate the string from beginning up to number, then from space until
% the end
T{i,1}{:} = [U(1:4+size(B{1}{1},2)) U(5+size(B{1}{1},2)+2:end)];
end
These are entries from an eDiary app.
Thank you

Connectez-vous pour commenter.

Plus de réponses (1)

Jyotsna Talluri
Jyotsna Talluri le 5 Nov 2019
If dates are in a particular format given by you,suffixes {"th","nd","st","rd"} can be removed by
erase(T,["th","nd","st","rd"]);
There can be other ways to do this also

Catégories

En savoir plus sur Entering Commands dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by