确定一周中的某一天和时间是否属于自定义周末时段

时间:2010-03-22 20:18:41

标签: c# c algorithm delphi

我一直在尝试提出一种方法,即给定一天中的一天和一天中的某个时间,如果它属于定制的周末时间,它将会返回。

周末期间保存在4个变量中,如下所示:

  1. 开始时的一周(0-6)
  2. 开始时的时间(0-23)
  3. 结束时的一周(0-6)
  4. 结束时的时间(0-23)
  5. 根据这些字段,周末时段可以是用户选择的任何内容(即使它远远超出常规周末)

    我一直在打这个,但无济于事。我在delphi中尝试这个,但任何语言都会这样做,因为我正在寻找算法,而不是实现。

3 个答案:

答案 0 :(得分:1)

我假设还有一个约束,即端点是> = beginpoint。

最简单的方法是规范化为“自开始一周以来的小时数”。

double interest = day * 24 + hours;
double startWeekend = startDay * 24 + startHours;
double endWeekend = endDay * 24 + endHours.
bool isInWeekend = interest >= startWeekend && interest < endWeekend;

根据需要调整&lt; =和&gt; =。

编辑:

如果问题是周末可能会重叠7 * 24小时的边界,那么它会变得更有趣:

if startWeekend < endWeekend
then isInWeekend = interest >= startWeekend AND interest < endWeekend;
else isInWeekend = interest >= startWeekend OR interest < endWeekend;

(略微混合的C / Pascal伪代码)

答案 1 :(得分:0)

将这四个值称为d start ,d end 为当天,h start ,h end 为时间。然后考虑从第0天开始的小时数,小时0,由t_start = d start * 24 + h start 给出,同样为{ {1}}。

如果您当前所在的小时数在t_end之前或t_end之后,那么您将处于周末期间。

答案 2 :(得分:0)

如果你想处理换行的间隔,

double hstart = startDay*24 + startHour;
double hend = endDay*24 + endHour;
double htest = testDay*24 + testHour;
return (hend-hstart)*(htest-hstart)*(hend-htest) > 0