Date Conversion

1 vue (au cours des 30 derniers jours)
Syed Abbas
Syed Abbas le 19 Déc 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 commentaires
Jan
Jan le 19 Déc 2011
Are you sure about the colon before the fractional seconds? Usually there is a dot.
Syed Abbas
Syed Abbas le 19 Déc 2011
Oh, that works now! I mistook the colun for the dot. Thansk a lot for ponting that out.

Connectez-vous pour commenter.

Réponse acceptée

Fangjun Jiang
Fangjun Jiang le 19 Déc 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 commentaires
Fangjun Jiang
Fangjun Jiang le 19 Déc 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 le 19 Déc 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)

Connectez-vous pour commenter.

Plus de réponses (3)

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

Connectez-vous pour commenter.


Jose Jeremias Caballero
Jose Jeremias Caballero le 19 Déc 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 le 19 Déc 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:

Catégories

En savoir plus sur Dates and Time dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by