我有一个数组,其中包含多个日期,格式为yyyymmdd,存储为50x1的double。我正在尝试提取年,月和日,以便可以使用datenum为每个日期分配一个序列号。
为单个日期建立索引,使用str2num进行转换,然后为适当的索引建立索引并提取适当的值,但是当我尝试遍历日期列表时,它不起作用-仅返回数字2的变体。
dates = [20180910; 20180920; 20181012; 20181027; 20181103; 20181130; 20181225];
% version1
datesnums=num2str(dates); % dates is a list of dates stored as
integers
for i=1:length(datesnums)
pullyy=str2num(datesnums(1:4));
pullmm=str2num(datesnums(5:6));
pulldd=str2num(datesnums(7:8));
end
以及
%version2
datesnums=num2str(dates,'%d')
for i = 1:length(datesnums)
dd=datenum(str2num(datesnums(i(1:4))),str2num(datesnums(i(5:6))),
str2num(datesnums(i(7:8))));
end
我正在尝试生成一个新数组,该数组只是输入日期的序列号。在所示的示例中,我仅获得单个整数值,我知道这是因为循环不正确,并且会出现错误,指出“索引超出了数组元素的数量(1)”。对于版本1。当我获得它成功遍历所有内容时,对于每个日期,输出只是“ 2222”,“ 22”,“ 22”,这是不正确的。我究竟做错了什么?我需要合并一个细胞阵列吗?
答案 0 :(得分:1)
要循环获取所有的年,月和日:
datesnums=num2str(dates);
for i=1:size(datesnums, 1)
pullyy(i) = str2num(datesnums(i,1:4));
pullmm(i) = str2num(datesnums(i,5:6));
pulldd(i) = str2num(datesnums(i,7:8));
end
实际上,您可以无循环进行此操作:
pullyy = str2num(datesnums(:,1:4));
pullmm = str2num(datesnums(:,5:6));
pulldd = str2num(datesnums(:,7:8));
说明:
例如,如果dates
向量是[6x1]数组:
dates =[...
20190901
20170124
20191215
20130609
20141104
20190328];
比datesnums=num2str(dates);
创建一个大小为[6x8]的字符矩阵,其中每一行对应于dates
中的一个元素:
datesnums =
6×8 char array
'20190901'
'20170124'
'20191215'
'20160609'
'20191104'
'20190328'
因此,在循环中,您需要引用每个日期的行索引和列索引以提取年,月和日。
答案 1 :(得分:1)
我能想到的最简单的解决方案是:
SN = datenum(num2str(dates),'yyyymmdd')
您只需指定日期格式为'yyyymmdd'