MatLab单元格日期格式转换

时间:2013-08-08 15:52:37

标签: matlab date format cell

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

我知道我可以使用

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

然后使用

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

其中ndatesArray的行数(在这种情况下约为2百万)以获得我的结果,但这种方法非常慢。

所以,我想知道另一种方法。

问候。

4 个答案:

答案 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函数。