Why slow conversion from date in Matlab time to day of year?
    6 views (last 30 days)
  
       Show older comments
    
I have a vector of dates in Matlab time convention which I need to convert to day of the year. The following code is slow (9 seconds) even though it is using builtin Matlab functions. What do you recommend to speed it up?
timeGmt = datenum(1996,1,1):1/24:now; % Long vector of dates covering many years
timeGmt = timeGmt'; % Change from row vector to column vector for compatibility in next line
yearDay = timeGmt - ...
      datenum(str2num(datestr(timeGmt, 10)), 1, 1) ... % Subtract off first day of this year
      + 1; % Add a day so that first day of year is day 1
0 Comments
Accepted Answer
  James Tursa
      
      
 on 18 May 2015
        
      Edited: James Tursa
      
      
 on 18 May 2015
  
      Try this variation using datevec instead of datestr:
vecGmt = datevec(floor(timeGmt)); % Set hms to 0's using floor
vecGmt(:,2:3) = 1; % Set month and day to Jan 1
yearDay = timeGmt - datenum(vecGmt) + 1;
3 Comments
  James Tursa
      
      
 on 18 May 2015
				Try the edited version using floor instead of setting the hms to 0's directly.
More Answers (1)
  Peter Perkins
    
 on 18 May 2015
        
      Edited: Walter Roberson
      
      
 on 19 May 2015
  
      In R2014b or later, use datetime. On a not particularly fast Win7 machine:
>> timeGmt = '1-Jan-1996':hours(1):datetime('now');
>> tic, dayOfYear = day(timeGmt,'dayofyear'); toc
Elapsed time is 0.041145 seconds.
2 Comments
  Peter Perkins
    
 on 3 Jun 2015
				If you have R2014b or later, you have the day function. It is a method of the datetime class, which was introduced in R2014b.
See Also
Categories
				Find more on Dates and Time 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!

