【发布时间】:2013-11-27 12:26:53
【问题描述】:
我如何创建一个仅给出月末天数的日期系列? 即
31/01/1993
28/02/1993
...
31/01/2013
【问题讨论】:
我如何创建一个仅给出月末天数的日期系列? 即
31/01/1993
28/02/1993
...
31/01/2013
【问题讨论】:
简单的方法是使用月初天数并减去一个。所以,例如:
datevec(datenum(1993,2,1)-1);
这会给你1993 01 31。然后为接下来的每个月做同样的事情是相当简单的。例如
datenum(1993,2:13,1)-1;
会给你整个 1993 年的月末天数。
编辑:
正如 Luis 指出的那样,如果您希望将日期作为格式化字符串,就像在原始问题中一样,您可以使用 datestr:
% The '24' causes datestr to use a predefined format of the form 'dd/mm/yyyy'
datestr(datenum(1993,2:13,1)-1,24)
EDIT2:
要做多年,你可以增加月数。 MATLAB 的 datenum 函数很聪明 - 如果你给它一个日期 datenum(1993,14,1) 它会返回 1994/2/1,所以如果你想要从 1993-2013 的每个月(20 年,所以 240 个月)你会使用
datestr(datenum(1993,2:241,1)-1,24)
【讨论】:
datestr 格式为 23:datestr(datenum(1993,2:13,1)-1,23)
使用日历功能:
for year = 1993:2013
for month = 1:12
lastday = max(max(calendar(year,month)));
fprintf('%02d/%02d/%04d\n',lastday,month,year)
end
end
您当然可以通过将 fprintf 更改为 sprintf 来将结果存储在矩阵(或元胞数组)中:
dates = char(zeros(12*21,10));
idx = 0;
for year = 1993:2013
for month = 1:12
idx = idx + 1;
lastday = max(max(calendar(year,month)));
dates(idx,:) = sprintf('%02d/%02d/%04d',lastday,month,year);
end
end
---编辑---
我发现还有eomday 功能。所以代替线:
lastday = max(max(calendar(year,month)));
你可以使用:
lastday = eomday(year,month);
在MATLAB中查看eomday函数类型的算法:
open eomday
【讨论】: