Date Conversion

5 views (last 30 days)
Syed Abbas
Syed Abbas on 19 Dec 2011
Hi,
I have a <200x1 cell> array which consists of dates read through a text file. The dates are in the format yyyy/mm/dd hh:mm:ss:fff. I want to convert these dates into a matlab recognizable date vector which could then be later used in creating time series objects. I am not sure how to do this.
Thanks,
  2 Comments
Jan
Jan on 19 Dec 2011
Are you sure about the colon before the fractional seconds? Usually there is a dot.
Syed Abbas
Syed Abbas on 19 Dec 2011
Oh, that works now! I mistook the colun for the dot. Thansk a lot for ponting that out.

Sign in to comment.

Accepted Answer

Fangjun Jiang
Fangjun Jiang on 19 Dec 2011
datenum()
>> dates={'2011/11/11 11:11:11:111';'2012/12/12 12:12:12:121'}
datenum(dates,'yyyy/mm/dd HH:MM:SS:FFF')
dates =
'2011/11/11 11:11:11:111'
'2012/12/12 12:12:12:121'
ans =
1.0e+005 *
7.3482
7.3522
  9 Comments
Fangjun Jiang
Fangjun Jiang on 19 Dec 2011
Change the last column symbol ":" in the format string to ".". Your data is different than you described in your question. Jan was right. It usually is HH:MM:SS.FFF, not HH:MM:SS:FFF
Fangjun Jiang
Fangjun Jiang on 19 Dec 2011
Or you don't need to specify the format anymore since it is standard.
%%
Dates={'2011/12/15 09:00:00.039';'2011/12/15 09:00:00.039'};
datenum(Dates)

Sign in to comment.

More Answers (3)

Walter Roberson
Walter Roberson on 19 Dec 2011
  4 Comments
Syed Abbas
Syed Abbas on 19 Dec 2011
size shows 1 23 and class shows char
Syed Abbas
Syed Abbas on 19 Dec 2011
I get the following error with cell fun:
Error using cellfun
Input #2 expected to be a cell array, was char instead.

Sign in to comment.


Jose Jeremias Caballero
Jose Jeremias Caballero on 19 Dec 2011
Hello.
>> A={'2011/12/19 13:27:50.890';'2012/12/19 18:49:40.790'}
A =
'2011/12/19 13:27:50.890'
'2012/12/19 18:49:40.790'
>> vector=datevec(A, 'yyyy/mm/dd HH:MM:SS.FFF')
vector =
1.0e+003 *
2.0110 0.0120 0.0190 0.0130 0.0270 0.0509
2.0120 0.0120 0.0190 0.0180 0.0490 0.0408

Jan
Jan on 19 Dec 2011
A less intelligent, but much faster method than DATENUM:
dates = {'2011/11/11 11:11:11.111'; ...
'2012/12/12 12:12:12.121'};
function Vector = myDateConversion(DateCell)
S = sprintf('%s ', DateCell{:});
D = sscanf(S, '%d/%d/%d %d:%d:%f');
Vector = transpose(reshape(D, 6, []));
On Matlab 2009a this is 5 times faster than datevec(dates, 'yyyy/mm/dd HH:MM:SS.FFF'), but datevec is much smarter and converts the '2011/32/12' correctly.
The date topic has been discussed in Mike's blog recently:

Categories

Find more on Dates and Time in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!