在Matlab中自动化任何一年的假期日期

时间:2014-06-14 14:43:47

标签: matlab date

下面的代码给出了特定年份的小数日。

HolidayArrayDate(2) = datenum(2012,01,16,00,00,00); %MartinLutherKingJrBirthday

我正在尝试使输入“dataYear”更加通用,而不是将其指定为“2012”。 Martin Luther King Jr Birthday是有史以来第三个星期一。当我通过“dataYear”向其提供2010/2011/2012/2013/2014任何年份的输入时,它应自动为我选择1月的第三个星期一。我怎么点这个?

谢谢!

1 个答案:

答案 0 :(得分:2)

从一年的第一天开始,21天总是足以找到第三个星期一。所以:获取一年中第一天的序列号(使用datenum);获得该周和之后的20天(datestr(..., 'd'));找到前三个星期一(find(...=='M', 3);最后选择第三个并将其转换为日期字符串(datestr):

dataYear = 2012; %// input
f = datenum(dataYear,1,1); %// 1st day of year, in serial date number format
r = find(datestr(f+(0:20), 'd')=='M', 3); %// find three Mondays from that day on
result = datestr(f+r(3)-1); %// third Monday, in date string format