3

MatLab には多くの日付があります (200 万以上)。これらの日付はすべて、セル配列の'yyyymmdd'形式になっています。それらを'yyyy-mm-dd'形式に変換し、この結果をセル配列 (char 行列ではなく) に入れたいと考えています。

私は使用できることを知っています

temp = datestr(datenum(datesArray,'yyyymmdd'),'yyyy-mm-dd'), 

そして使用する

mat2cell(temp, ones(1,n),10), 

ここnで、結果を取得するための行数datesArray(この場合は約 200 万) ですが、このアプローチは非常に遅いです。

だから、私はそれを行う別の方法を知りたいです。

よろしく。

4

4 に答える 4

3

を使用して for ループを回避できcellfunます。たとえば、日付セル配列が

dates = {'20120101', '20120102', '20120103'}

次に、それらを次の形式に変換できます

cellfun(@(x)[x(1:4),'-',x(5:6),'-',x(7:8)], dates, 'Uniform', false)

それが役立つことを願っています。

于 2013-08-08T17:53:36.767 に答える
0

日付形式が常に「yyyymmdd」であり、それが という線形セル配列datesArrayにある場合、文字列にアクセスし、datesArrayハイフンを挿入して文字列を連結して変換することで、それを行うことができます。

for i=1:length(datesArray)
newDatesArray{i} = [datesArray{i}(1:4), '-', datesArray{i}(5:6), '-', datesArray{i}(7:8)];
end
于 2013-08-08T16:02:12.367 に答える
0

日付をシリアルに変換して保管してください。ただし、ここに解決策があります:

% Create dummy dates (takes 10 seconds on my pc)
tic;d = cellstr(datestr(now-2e5+1:now,'yyyymmdd'));toc

% Convert to char, then concatenate with '-' and back to `cellstr()` (1 sec):
c    = char(d);
dash = repmat('-',2e5,1);
c    = cellstr([c(:,1:4) dash c(:,5:6) dash c(:,7:8)]);
于 2013-08-08T20:18:49.563 に答える