Timespan /时区之间的日期时间匹配

时间:2016-11-23 13:29:34

标签: c# date datetime

我需要检查一个DateTime变量是否在两周之间匹配。

23.11.2016 14:08 之类的东西是之间的

  • 周一18:00和周一22:00
  • 周一22:00和周二07:00

目前我可以检查一天是否在正确的日子之间:

{{1}}

我开始构建一些看起来几乎一样的东西,但是 那是行不通的。

是否有一种更简单的方式我不知道或另一种解决方案? 我只需要检查一下是否有人在正常工作时间之外工作。

3 个答案:

答案 0 :(得分:1)

我编辑所有内容以改变答案,因为我不太了解你的问题。

您可以执行以下操作:

TimeSpan timeFrom = new TimeSpan(15,40,00);
TimeSpan timeUntil = new TimeSpan(22,00,00);

if (yourDate.TimeOfDay > timeFrom && yourDate.TimeOfDay < timeUntil)
{
    return;
}

为了检查星期几你可以采取Sefe之前回答的问题。

答案 1 :(得分:1)

您可以使用DateTime.DayOfWeek

DateTime dTime = DateTime.Parse(/*String from sql database*/);
DayOfWeek weekdayFrom = DayOfWeek.Tuesday;
DayOfWeek weekdayTo = DayOfWeek.Wednesday;

if ((dTime.DayOfWeek >= weekdayFrom) && (dTime.DayOfWeek <= weekdayTo))

一方面注意:DayOfWeek枚举在星期日作为第一天开始,以星期六作为最后一天结束。如果这对您很重要,您必须先使用CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek来抵消您的工作日。

<强>更新

如果你想查看时间,你也必须检查实际的时差:

DateTime dTime = DateTime.Parse(/*String from sql database*/);
DayOfWeek weekdayFrom = DayOfWeek.Tuesday;
DayOfWeek weekdayTo = DayOfWeek.Wednesday;
double hourFrom = 12;
double hourTo = 18;

DateTime periodStart = dTime.AddDays(weekdayFrom - dTime.DayOfWeek).Date.AddHours(hourFrom);
DateTime periodEnd = dTime.AddDays(weekdayTo - dTime.DayOfWeek).Date.AddHours(hourTo);

if ((dTime >= periodStart) && (dTime <= periodEnd))

同样,您可能需要使用FirstDayOfWeek进行抵消。

答案 2 :(得分:0)

经过多次尝试和搜索,我得出的结论是,我无法按照我想要的具体方式解决问题(工作轮班和假期之间的时间间隔等),但我找到了可以提供的第三方图书馆我可能需要的一切。

http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET