我想创建一个截至2月底的日期列表。但是,由于2月底是否有闰年,因此从2月底变为28,我在如何考虑这两种选择方面遇到了麻烦。
这是我到目前为止所拥有的:
date = datenum(years(i),12,01):1:datenum(years(i)+1,02,29);
这种情况,在一年不是闰年的情况下运行,最终计算在3月1日,而不是在2月28日结束。
答案 0 :(得分:2)
我想出了一个小小的黑客。通过计算2月28日到3月1日之间的天数,您可以非常轻松地检查一年是否是闰年,如下所示:
datenum(years(i), 3, 1) - datenum(years(i), 2, 28)
检查它是否大于1表示闰年。这个1或0 logical
MATLAB约定导致了hack的第二部分:这正是你需要添加到2月28日的天数:0如果不是闰年,则为1,如果是闰年。因此,这就是完整的黑客攻击:
date = datenum(years(i),12,01):datenum(years(i)+1,02, ...
28 + ((datenum(years(i)+1,3,1) - datenum(years(i)+1,2,28))>1) );
更新/改进:
答案已被接受,但我想出了一个更好的解决方案。我没有意识到datenum
只算几天。在这种情况下,我们可以简单地说,2月的最后一天是 3月1日前一天。这产生了以下极大的简化:
date = datenum(years(i),12,01):1:(datenum(years(i)+1,3,1)-1);
答案 1 :(得分:2)
对于好或坏,Datenum取负数和零数。所以2月的最后一天可以写成:
datenum(2015, 3, 0)
当然,评论解释这种疯狂。