2016-11-23 89 views
0

我需要检查一个DateTime变量是否与两周的时间匹配。TimeSpan/Timezone之间的日期时间匹配

喜欢的东西2016年11月23日14:08是,或者在之间:周一18:00至22:00周一

  • 周一22:00,周二

    • 07:00

    目前我可以检查一天是否在恩正确天:

    DateTime dTime = DateTime.Parse(/*String from sql database*/); 
                // German weekday abbreviations 
    String[] Days = new string[] { "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So" }; 
    
    string Day = dTime.ToString("ddd", new CultureInfo("de-DE")); 
    string DayFrom = "Di"; 
    string DayTill = "Mi"; 
    
    int DayposStop = Array.IndexOf(Days, Day); 
    int DayposFrom = Array.IndexOf(Days, DayFrom); 
    int DayposTill = Array.IndexOf(Days, DayTill); 
    
    if (((DayposFrom <= Daypos || Daypos <= DayposTill) 
    

    我开始建立一些东西,看起来几乎为没有工作的时间,但 相同。

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

  • +1

    '('23 .11.2016 18.00' <'23 .11.2016 14:08' <= '23 .11.2016 22.00' )|| ('23 .11.2016 22.00'<'23 .11.2016 14:08'<= '24 .11.2016 07.00')。“这就是你需要的,对吧? –

    +0

    是的东西是这样的,但我没有日期它只是星期一或星期五没有21.Oktober左右 – MaxW

    回答

    1

    我编辑所有以改变答案,因为我没有很好地理解你的问题。

    你可以做到以下几点:

    TimeSpan timeFrom = new TimeSpan(15,40,00); 
    TimeSpan timeUntil = new TimeSpan(22,00,00); 
    
    if (yourDate.TimeOfDay > timeFrom && yourDate.TimeOfDay < timeUntil) 
    { 
        return; 
    } 
    

    为了检查你可以采取什么SEFE之前回答了星期几。

    +0

    不会为我工作,因为检查的日期不是真正的约会星期一12:00至星期一13:00每周都不是真正的约会。 – MaxW

    +0

    编辑,以改变我的答案,以适应您的问题 –

    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)) 
    

    一个旁注,虽然:在星期几枚举上周日开始的第一天,结束与周六的最后一天。如果这对你很重要,你必须首先使用CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek抵消你的工作日。

    UPDATE:

    如果要检查你的时间,你也将有检查的实际时间差:

    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抵消。

    +0

    这将缩短我的代码高于伟大但什么与时间之间像10点和16点之间? – MaxW

    相关问题