2016-11-23 91 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

    相關問題