2016-11-23 10 views
0

DateTime変数が2週間の間に一致するかどうかを確認する必要があります。DateTimeがTimespan/Timezoneの間で一致する

何か2016年11月23日14時08分ようがあるかだった間:月曜日18:00から月曜日午前22時 または

  • 月曜日22時と火曜日

    • 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

    答えて

    0

    多くのことを試して検索した結果、私は自分が望む特定の方法で問題を解決することができなかったという結論に達しましたが(シフトと休暇の間の時間帯に)、私は第三者図書館が見つかりましたおそらく必要なすべてを提供する。

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

    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時から月曜日の13時であることを確認する日がない毎週実際の日付ではありません。 – 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)) 
    

    一つ追記かかわら:のDayOfWeek列挙は最初の日として日曜日に始まり、最後の日と土曜日で終わります。あなたにとって重要なことは、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時のようなTimespanではどうですか? – MaxW

    関連する問題