我有一个2015年所有日期的载体,即:
'01.01.2015'
'02.01.2015'
.
.
.
'31.12.2015'
如何消除列表中的日子?所以结果是这样的列表:
'01.2015'
'01.2015'
.
.
.
'12.2015'
'12.2015'
非常感谢你!此外,如果我知道,如何消除从一个日期开始的日子,这将是一个很大的帮助。谢谢!
答案 0 :(得分:2)
由于所有字符串格式相同,您可以选择从每个字符串中的第4个字符开始直到最后一个字符的字符:
DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}
NewDates = cellfun(@(x) x(4:end),DatesCell,'uni',0)
此代码使用cellfun
,这只是伪装的for循环。
以下是等效的:
DatesCell = {'01.01.2015';'02.01.2015';'21.12.2015'}
NewDatesLoop = cell(numel(DatesCell),1);
for k =1:numel(DatesCell)
NewDatesLoop{k} = DatesCell{k}(4:end);
end
输出:
NewDates =
'01.2015'
'01.2015'
'12.2015'
NewDatesLoop =
'01.2015'
'01.2015'
'12.2015'
答案 1 :(得分:1)
如果您的日期始终采用相同的格式,您可以通过简单的site电话来完成:
testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};
myrange = [1:2 6:10];
newdates = cellfun(@(x) x(myrange), testdates, 'UniformOutput', false);
返回:
newdates =
'01.2015'
'02.2015'
'03.2015'
'04.2015'
cellfun
将一些函数应用于单元格数组中的每个单元格。我在这里使用的是使用应用于每个单元格的myrange
索引创建一个新数组。请注意,这不是一种强大的方法,只要日期格式发生变化就会中断。
对于更强大的方法,您可以考虑使用cellfun
和datenum
:
testdates = {'01.01.2015';'02.01.2015';'03.01.2015';'04.01.2015'};
serialdates = datenum(testdates, 'mm.dd.yyyy');
newdates = datestr(serialdates, 'mm.yyyy');
返回:
newdates =
01.2015
02.2015
03.2015
04.2015
如果您的日期格式发生变化(或在整个数组中变化),这也会中断,但行为比cellfun
调用更明确。