我在MatLab中有很多约会(超过2百万)。这些日期在'yyyymmdd'
格式的单元格数组中,我想将它们转换为'yyyy-mm-dd'
格式,并将此结果放在单元格数组中(而不是在char矩阵中)。
我知道我可以使用
temp = datestr(datenum(datesArray,'yyyymmdd'),'yyyy-mm-dd'),
然后使用
mat2cell(temp, ones(1,n),10),
其中n
是datesArray
的行数(在这种情况下约为2百万)以获得我的结果,但这种方法非常慢。
所以,我想知道另一种方法。
问候。
答案 0 :(得分:3)
您可以使用cellfun
来避免for循环,假设您的日期单元格数组是
dates = {'20120101', '20120102', '20120103'}
然后,您可以将它们转换为
格式cellfun(@(x)[x(1:4),'-',x(5:6),'-',x(7:8)], dates, 'Uniform', false)
希望有所帮助。
答案 1 :(得分:0)
如果您的日期格式始终为“yyyymmdd”并且它位于名为datesArray
的线性单元格数组中,您可以通过访问datesArray
中的字符串并通过插入连字符并连接它们来转换它们。字符串。
for i=1:length(datesArray)
newDatesArray{i} = [datesArray{i}(1:4), '-', datesArray{i}(5:6), '-', datesArray{i}(7:8)];
end
答案 2 :(得分: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)]);
答案 3 :(得分:0)
所以在这里我的解决方案,我认为非常好!
dates = {'20120101', '20120102', '20120103'}
您可以使用此转换:
cellfun(@(x)regexprep(num2str(x), '(?<=\d{4})\d{2}', '-$0'),dates,'Uniform',false)
答案类似于雷达头,但它使用的是regexprep
函数。