Why does my datestr return weird result?

I am experiencing some problem returning the correct results for my datestr function. When I execute the following script inside the command window:
datestr('18/10/2011 5:05:55 PM','dd/mm/yyyy HH:MM:SS PM')
the output came out as: 02/04/0024 5:05:55 PM
When I execute the following:
datestr('10/18/2011 5:05:55 PM','dd/mm/yyyy HH:MM:SS PM')
the output came out as: 18/10/2011 5:05:55 PM
Is is something to do with my Matlab setting? Basically I want to convert the given string (a time format written as string in dd/mm/yyyy HH:MM:SS pm) into Matlab datestr in dd/mm/yyyy HH:MM:SS pm format
Thanks in advance, Nu'man.

 Risposta accettata

the cyclist
the cyclist il 15 Dic 2011
When doing string-to-string date conversion, MATLAB assumes that the first input is in "MATLAB standard dateform", which will be mm/dd/yyyy etc. If you want to use a different dateform, you must first convert that to MATLAB standard dateform (using datenum), then convert it back using datestr.
Your second example is in standard dateform, and is correctly converted; your first is not (because it is in dd/mm/yyyy).
This is stated in the "Tips" section of "doc datestr", and in the last paragraph of "help datestr".

1 Commento

Cool, thanks. I didnt notice 'help datestr' is different from 'doc datestr'. 'help datestr' did explain the tip section better.

Accedi per commentare.

Più risposte (2)

Jan
Jan il 15 Dic 2011
Sorry, I do not get the point. You have a string in the format:
dd/mm/yyyy HH:MM:SS pm
and want to get a string in the format:
dd/mm/yyyy HH:MM:SS pm
???
The reason behind this question is because I want to run a sql based on the user date input, the input string can be: '*', '*-30d', '18/10/2011' or '18/10/2011 5:05:55 PM'
Based on these inputs I want to manipulate it so the string appear as 'dd/mm/yyyy HH:MM:SS pm' format. Currently I've got the following in place to handle the input but keep getting the odd result.
symbol_star=regexpi(from, '[*-]', 'match');
[~,symbol_starc]=size(symbol_star);
switch symbol_starc
case 1
mod_from=datestr(now,'dd/mm/yyyy HH:MM:SS PM');
otherwise
symbol_minus=regexpi(from, '[-]', 'match');
[~,symbol_minusc]=size(symbol_minus);
switch symbol_minusc
case 1
dayminus=regexpi(from, '\d*', 'match');
dayminus=str2double(cell2mat(dayminus));
mod_from=datestr(now-dayminus,'dd/mm/yyyy HH:MM:SS PM');
otherwise
%the problem is here
mod_from=datestr(from,'dd/mm/yyyy HH:MM:SS PM');
end
end
Answers from 'the cyclist' and 'andrei' help me understood this better. THanks guys.

Categorie

Scopri di più su Financial Toolbox in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by