datenum系列到2月底 - 闰年与否

时间:2015-01-07 18:41:23

标签: matlab date time-series

我想创建一个截至2月底的日期列表。但是,由于2月底是否有闰年,因此从2月底变为28,我在如何考虑这两种选择方面遇到了麻烦。

这是我到目前为止所拥有的:

date = datenum(years(i),12,01):1:datenum(years(i)+1,02,29);

这种情况,在一年不是闰年的情况下运行,最终计算在3月1日,而不是在2月28日结束。

2 个答案:

答案 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)

当然,评论解释这种疯狂。