Date Conversion

1 次查看(过去 30 天)
Syed Abbas
Syed Abbas 2011-12-19
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 个评论
Jan
Jan 2011-12-19
Are you sure about the colon before the fractional seconds? Usually there is a dot.
Syed Abbas
Syed Abbas 2011-12-19
Oh, that works now! I mistook the colun for the dot. Thansk a lot for ponting that out.

请先登录,再进行评论。

采纳的回答

Fangjun Jiang
Fangjun Jiang 2011-12-19
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 个评论
Fangjun Jiang
Fangjun Jiang 2011-12-19
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 2011-12-19
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)

请先登录,再进行评论。

更多回答(3 个)

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

请先登录,再进行评论。


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

类别

Help CenterFile Exchange 中查找有关 Dates and Time 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by