日期数字系列到 2 月底 - 闰年与否



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

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

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

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

这是我想出的一个小技巧。您可以通过计算 2 月 28 日至 3 月 1 日之间的天数来非常轻松地检查一年是否为闰年,如下所示:

datenum(years(i), 3, 1) - datenum(years(i), 2, 28)

检查它是否大于 1 将指示闰年。这个 1 或 0 logical MATLAB 约定导致了黑客的第二部分:这正是您需要添加到 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);

Datenum,无论好坏,都取负数和零数。所以二月的最后一天可以写成:

datenum(2015, 3, 0)

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

最新更新