# formulating elapsed time in hours for input data...

1 view (last 30 days)
Chris E. on 28 Jun 2015
Answered: Peter Perkins on 6 Jul 2015
I have some code that I need to change from a string into a vector of numbers representing elapsed hours. My input data looks like:
date_str = '2015-06-05 14:17:36'
'2015-06-05 14:17:36'
'2015-06-05 14:17:36'
'2015-06-05 14:17:36'
'2015-06-05 14:17:36'
'2015-06-05 14:17:39'
'2015-06-05 14:17:39'
'2015-06-05 14:17:39'
'2015-06-05 14:17:39'
'2015-06-05 14:17:39'
'2015-06-05 14:17:39'
'2015-06-05 14:17:40'
'2015-06-05 14:20:09'
'2015-06-05 14:20:09'
'2015-06-05 14:20:09'
'2015-06-05 14:20:09'
'2015-06-05 14:23:00'
'2015-06-05 14:23:00'
'2015-06-05 14:23:34'
'2015-06-05 14:23:34'
'2015-06-05 14:23:35'
'2015-06-05 14:23:35'
'2015-06-05 14:23:35'
'2015-06-05 14:23:35'
'2015-06-05 14:23:35'
'2015-06-05 14:26:47';
This is a rather short list of the data, it is actually made up of over 1000000 date strings, the function I use now is:
function [e_time] = date2time(date_str)
date_format = 'mm/dd/yyyy HH:MM:SS';
t_datevec = zeros(size(date_str,1),6);
e_time = zeros(1,length(date_str));
for i = 1:length(date_str)
t_str = datestr(date_str(i),date_format);
t_datevec(i,:) = datevec(t_str);
e_time(i) = etime(t_datevec(i,:),t_datevec(1,:))/3600;
end
end
So it takes a long time to actually use this function, I'm sure that is due to the for loop, any suggestions or ideas to speed this up? Thank You!

Peter Perkins on 6 Jul 2015
In MATLAB R2014b or later, use datetime. With your date_str variable converted to a cell array of strings:
>> d = datetime(cellstr(date_str))
d =
05-Jun-2015 14:17:36
05-Jun-2015 14:17:36
05-Jun-2015 14:17:36
05-Jun-2015 14:17:36
05-Jun-2015 14:17:36
05-Jun-2015 14:17:39
05-Jun-2015 14:17:39
...
05-Jun-2015 14:26:47
>> t1 = d - d(1); t1.Format = 'h' % elapsed since first
t1 =
0 hrs
0 hrs
0 hrs
0 hrs
0 hrs
0.00083333 hrs
0.00083333 hrs
...
0.15306 hrs
>> t2 = diff(d); t2.Format = 'h' % successive diffs
t2 =
0 hrs
0 hrs
0 hrs
0 hrs
0.00083333 hrs
0 hrs
0 hrs
...
0.053333 hrs
Those create durations. If you need double values, wrap the hours function around them. Hope this helps.

### Categories

Find more on Programming in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!