Date Conversion

4 visualizzazioni (ultimi 30 giorni)
Syed Abbas
Syed Abbas il 19 Dic 2011
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.
  2 Commenti
Jan il 19 Dic 2011
Are you sure about the colon before the fractional seconds? Usually there is a dot.
Syed Abbas
Syed Abbas il 19 Dic 2011
Oh, that works now! I mistook the colun for the dot. Thansk a lot for ponting that out.

Accedi per commentare.

Risposta accettata

Fangjun Jiang
Fangjun Jiang il 19 Dic 2011
>> 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 *
  9 Commenti
Fangjun Jiang
Fangjun Jiang il 19 Dic 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 il 19 Dic 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'};

Accedi per commentare.

Più risposte (3)

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

Accedi per commentare.

Jose Jeremias Caballero
Jose Jeremias Caballero il 19 Dic 2011
>> 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 il 19 Dic 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:


Scopri di più su Dates and Time in Help Center e File Exchange


Community Treasure Hunt

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

Start Hunting!

Translated by