【问题标题】:Automating a holiday date for any year in Matlab在 Matlab 中自动设置任何一年的假期日期
【发布时间】:2014-06-15 10:49:53
【问题描述】:

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

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

我试图让输入“dataYear”的假期更通用,而不是将其指定为“2012”。小马丁路德金生日是每年的第三个星期一。当我通过“dataYear”向它提供任何年份 2010/2011/2012/2013/2014 的输入时,它应该会自动为我选择 1 月的第三个星期一。我怎么点这个?

谢谢!

【问题讨论】:

    标签: matlab date


    【解决方案1】:

    从一年的第一天开始,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
    

    【讨论】:

    • 为什么“r = find(datestr(f+(0:26), 'd')=='M', 3);”只从 0:26 开始?我相信这只有 27 天。
    • @user3698120 应该是20(现已更正)。 0:20 包含 21 天。 21 是保证找到第三个星期一的最少天数
    • +1, nice =) 旁注:我通过低质量审查队列得到了这个答案。我不确定是否有人标记了它,或者是否所有仅包含代码的答案都会自动发送到那里,但是看到有很多机器人审阅者,嗯... :) 想我应该提一下...如果答案被删除! :)
    • 明白。感谢您的帮助!
    • @RobertP。感谢您的提醒!是的,可能需要一些文字。代码 cmets 很好地解释了正在做的事情,尽管
    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    相关资源
    最近更新 更多