MATLAB Answers

Is the performance of comparing datetime datatypes slower than datenum

7 views (last 30 days)
Tom
Tom on 15 Jul 2016
Answered: Tom on 16 Jul 2016
I'm finding where a desired timestamp (`datetime`) fits within a large datetime array. However, this step takes a very long time and from the profiler, it appears most of the time is spent on datevec. Would it be faster to convert everything over to datenum values?
Currently the comparison step looks like this:
tol = duration(0,0,0,40);
time = datetime(timeIn);
idx = arrayfun(@(x) find(abs(x.time-time)<=tol),obj,'uni',0);
  1 Comment
dpb
dpb on 15 Jul 2016
What's the form of timeIn? What may help is to give the specific format; at one time (I believe/maybe still does?) datenum looked at each element if a format wasn't provided which was much slower than with the appropriate format.
I'd not be terribly surprised if as a rule datetime is somewhat slower than datenum simply because it's more capable as well as the object stuff will add some overhead as well, in all likelihood.
I can't test the comparative here, though...

Sign in to comment.

Accepted Answer

Tom
Tom on 16 Jul 2016
Based on testing, it is much faster to compare dates using datenum instead of datetime, even after converting to datenum from datetime. I'm supposing dpb was correct about the overhead involved in the datetime datatype, but I'm only speculating. It is nice to know that converting within a calculation improves performance, because the datetime type is very convenient in all other aspects.
tic; arrayfun(@(x) find(abs(datenum(x.dateTime)-datenum(timeDate))<=tol),obj(1),'uni',0); toc;
Elapsed time is 0.021072 seconds.
tic; arrayfun(@(x) find(abs(datenum(x.dateTime)-datenum(timeDate))<=datenum(tol)),obj(1),'uni',0); toc;
Elapsed time is 0.007963 seconds.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!