我只是希望在今天1年后生成一系列日期。
我试过这个
CurveLength=30;
t=zeros(CurveLength);
t(1)=datestr(today);
x=2:CurveLength-1;
t=addtodate(t(1),x,'year');
到目前为止我收到两个错误?
???在赋值A(I)= B中,B和中的元素个数 我猜这与日期是一个字符串的事实有关,但当我修改字符串与日期dd-mmm-yyyy相同的长度,即11个字母时,我仍然得到相同的错误。
我得错误
???使用==>时出错addtodate at 45 数量必须是数字标量。
这似乎表明该功能无法进行矢量化?如果这是真的,那么无论如何都要事先告诉哪些函数可以被矢量化而哪些不可以?
答案 0 :(得分:4)
要将n
年添加到日期x
,请执行以下操作:
y = addtodate(x, n, 'year');
但是,addtodate
需要以下内容:
x
必须是标量数字,而不是字符串。n
必须是标量数字,而不是矢量。因此你会得到错误。
我建议您使用循环来执行此操作:
CurveLength = 30;
t = zeros(CurveLength, 1);
t(1) = today; % # Whatever today equals to...
for ii = 2:CurveLength
t(ii) = addtodate(t(1), ii - 1, 'year');
end
现在您已拥有所有日期值,您可以将其转换为字符串:
datestr(t);
这是一个使用arrayfun
的简洁单行;
datestr(arrayfun(@(n)addtodate(today, n, 'year'), 0:CurveLength))
答案 1 :(得分:1)
如果序列具有常量已知的开始,则可以通过以下方式使用datenum:
t = datenum( startYear:endYear, 1, 1)
只要序列没有成为负数(如1:-1:-10),这也适用于月,日,小时等。然后几个月和几天以非标准的方式行事。
答案 2 :(得分:0)
这里没有循环的解决方案(可能更快):
CurveLength=30;
t=datevec(repmat(now(),CurveLength,1));
x=[0:CurveLength-1]';
t(:,1)=t(:,1)+x;
t=datestr(t)
datevec将日期分为六列[年,月,日,小时,分钟,秒]。所以,如果你想改变,例如你只需要添加或减去它的那一年。
如果您想更改月份,只需添加到t(:,2)。您甚至可以添加数字> 12月到月,如果你将它转回日期或日期,它将正确地增加年和月。