我有一个单元格数组的日期作为字符串(格式:"mm/dd/yyyy"),其中字符串长度因单元格条目而异,从 8 到 10,具体取决于日期(例如,n = 8 表示"1/1/2015",n = 10 表示"10/10/2015")。我想将每个单元格数组条目转换为其相应的双精度作为日期数数量。我试过:
id = find(~cellfun( @isempty, regexp( dateList, '/', 'tokenExtents' ) ) );
和
id = find(~cellfun( @isempty, strfind( dateList, '/' ) ) );
但这是不对的。提供了单元格数组的片段:
dateList = {'9/9/2016';
'9/10/2016';
'10/10/2016';
'10/11/2016'};
你只需要使用datenum
,因为它将接受一个字符串的单元格数组:
dateList = {'9/9/2016'; '9/10/2016'; '10/10/2016'; '10/11/2016'};
id = datenum(dateList);
并确认它有效:
>> datestr(id)
ans =
09-Sep-2016
10-Sep-2016
10-Oct-2016
11-Oct-2016
1)将每个单元格提取为3个不同的块,并带有strsplit:日,月和年
2)使用pad使每个块的长度相同(2表示日和月,4为年)
3) 将字符串与 [D,'/',M,'/',Y] 连接在一起,您就可以毫无问题地运行 datenum。
编辑 1:我认为另一个答案要容易得多,我不知道 datenum 可以接受带有略有不同的有孔的字符串。