下面的代码给出了特定年份的小数日。
HolidayArrayDate(2) = datenum(2012,01,16,00,00,00); %MartinLutherKingJrBirthday
我正在尝试使输入“dataYear”更加通用,而不是将其指定为“2012”。 Martin Luther King Jr Birthday是有史以来第三个星期一。当我通过“dataYear”向其提供2010/2011/2012/2013/2014任何年份的输入时,它应自动为我选择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