工作日和周末的Matlab代码

时间:2016-03-03 13:23:29

标签: matlab simulink

如果时间在上午7点到下午5点之间,我能够成功制定一个输出为1的计划,否则为0,时间基于我的计算机。然而,周一至周日这一天也基于我的电脑..我无法找到解决方案,在周一至周六输出输出1,在周日输出0。我的代码在下面

function y = IsBetween5AMand7PM
coder.extrinsic('clock');
time = zeros(1,6);
time = clock;
current = 3600*time(4) + 60*time(5) + time(6); %seconds passed from the beginning of day until now
morning = 3600*7; %seconds passed from the beginning of day until 7AM
evening = 3600*17; %seconds passed from the beginning of day until 5PM
y = current > morning && current < evening;

end

现在这里的时间是正确的,我需要的是当天(周一至周日)我需要的输出。此matlab代码也在Simulink块上的matlab函数内。

1 个答案:

答案 0 :(得分:1)

如果您使用这样的工作日,您可以按照您今天的日期指定生成0/1值:

if (weekday(now) > 1)
   day_of_week_flag = 1;
else
   day_of_week_flag = 0;

或者如果你愿意,这个单行做同样的事情,但如果你不熟悉语法可能不那么容易阅读:

day_of_week_flag = ( weekday(now) > 1);

您还可以使用此类日期字符串转换其他日期:

day_of_week_flag = ( weekday('01-Mar-2016') > 1 )

最后,如果您有一个数字数组的日期/时间值,例如[2016 3 3 12 0 0],您首先需要使用datenum转换为序列日期,然后使用工作日:

time = clock;
day_of_week_flag = ( weekday(datenum(time)) > 1);

不使用工作日进行检查的另一种方法如下:

time = clock;
day_of_week = datestr(time, 8);
if (day_of_week == 'Sun')
   day_of_week_flag = 0;
else
   day_of_week_flag = 1;