日期和時間字串快速到數字陣列

可以使用 datenum 將日期和時間字串轉換為數字陣列,儘管讀取大型資料檔案可能需要一半的時間。

考慮示例 Textscan 中的資料。再次,通過使用文字掃描並將日期和時間解釋為整數,它們可以快速轉換為數字陣列。

即示例資料中的一行將被解釋為:

 Data , 2015  - 09  -  16  ,  15  :  41  :  52  ;  801 , 800.000000 , 1.5123 , 0.0043
ignore double double double double double double double    double     double   double

這將被解讀為:

fid = fopen('path/to/myfile');
data = textscan(fid,'%*s %f %f %f %f %f %f %f %f %f %f','Delimiter',',-:;');
fclose(fid);

現在:

y = data{1};          % year
m = data{2};          % month
d = data{3};          % day
H = data{4};          % hours
M = data{5};          % minutes
S = data{6};          % seconds
F = data{7};          % milliseconds

% Translation from month to days
ms = [0,31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; 

n = length(y);        % Number of elements
Time = zeros(n,1);    % Declare numeric time array

% Algorithm for calculating numeric time array
for k = 1:n
    Time(k) = y(k)*365 + ms(m(k)) + d(k) + floor(y(k)/4)...
              - floor(y(k)/100) + floor(y(k)/400) + (mod(y(k),4)~=0)...
              - (mod(y(k),100)~=0) + (mod(y(k),400)~=0)...
              + (H(k)*3600 + M(k)*60 + S(k) + F(k)/1000)/86400 + 1;
end

在 566,678 個元素上使用 datenum 需要 6.626570 秒,而上述方法需要 0.048334 秒,即 datenum 的時間為 0.73%或快〜137 倍。