3

我在 MatLab 中有很多约会(超过 200 万)。所有这些日期都在'yyyymmdd'格式的单元格数组中,我想将它们转换为'yyyy-mm-dd'格式并将此结果放入单元格数组中(而不是在字符矩阵中)。

我知道我可以使用

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

然后使用

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

为了得到我的结果,其中n的行数(在这种情况下大约为 200 万),但这种方法非常慢。datesArray

所以,我想知道一种不同的方法来做到这一点。

问候。

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

将您的日期转换为连续日期并保留它们!但是,这里有一个解决方案:

% 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 回答
0

所以这是我的解决方案,我认为这非常好!

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

你可以使用这个转换:

cellfun(@(x)regexprep(num2str(x), '(?<=\d{4})\d{2}', '-$0'),dates,'Uniform',false)

答案类似于radarhead,但它使用的是regexprep函数。

于 2013-08-08T20:20:03.503 回答
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 回答