【问题标题】:Determine if a day of week and time fall in a custom weekend period确定一周中的某一天和时间是否属于自定义周末期间
【发布时间】:2010-03-22 20:18:41
【问题描述】:

我一直在尝试想出一种方法,给定一周中的一天和一天中的时间,如果它属于自定义周末期间,它将返回。

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

  1. 星期几开始 (0-6)
  2. 一天中开始的时间 (0-23)
  3. 星期几结束 (0-6)
  4. 一天中结束的时间 (0-23)

根据这些字段,周末时段可以是用户选择的任何时间(即使它远远超出常规周末)

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

【问题讨论】:

  • 周末是周五和周日,周六是工作日的文莱怎么样?

标签: c# c algorithm delphi


【解决方案1】:

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

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

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

根据需要调整 =。

编辑:

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

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

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

【讨论】:

  • 为什么需要约束?它不是端点,而是一周中的某一天。
  • 我把星期天算作 0。所以,星期六 -> 星期天是 6 -> 对我来说是 0。
  • 选择一个周末期间 Friday(17:00) -> Monday(9:00) 将产生 5,17 -> 1,9 为什么这无效?
【解决方案2】:

调用这四个值 dstart, dend 表示当天,hstart, hend 表示小时。然后考虑从第 0 天第 0 小时开始的总小时数,由 t_start = dstart * 24 + hstart 给出,t_end 也是如此.

如果您当前所在的一周中的某个小时在t_end 之前或t_start 之后,则您处于周末期间。

【讨论】:

  • 您的意思是:“在 t_end 之前 在 t_start 之后”?我将其表述为“在 t_start 之后和 t_end 之前”。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多