2010-12-07 13 views
1

複数の時間範囲が与えられていると、現在の時刻がどの時間範囲に属するのかを調べる必要があります。 DateTimeの日付部分を無視して、これをより効率的に行うにはどうすればよいですか。時間範囲でオーバーラップを見つける

TimeSlot.Overlaps(DateTime currTime)メソッドは日付部分を無視し、その部分のみを一致させる必要があります。

+0

を開始と終了の日付時刻を比較します。 com/ja-us/library/system.timespan.aspxはそれですか?そうでない場合、それは何ですか? 'TimeSlot'とは何ですか? –

+1

TimeSlotは、StartTimeプロパティとEndTimeプロパティを持つカスタムクラスです – Faisal

答えて

2
public class TimeSlot 
{ 
    public DateTime StartTime { get; set; } 
    public DateTime EndTime { get; set; } 


    public bool Overlaps(DateTime compareTime) 
    { 
     return Overlaps(new TimeSlot() { StartTime = compareTime, EndTime = compareTime }); 
    } 

    public bool Overlaps(TimeSlot compareSlot) 
    { 
     return (
      (compareSlot.StartTime.TimeOfDay >= StartTime.TimeOfDay && compareSlot.StartTime.TimeOfDay < EndTime.TimeOfDay) || 
      (compareSlot.EndTime.TimeOfDay <= EndTime.TimeOfDay && compareSlot.EndTime.TimeOfDay > StartTime.TimeOfDay) || 
      (compareSlot.StartTime.TimeOfDay <= StartTime.TimeOfDay && compareSlot.EndTime.TimeOfDay >= EndTime.TimeOfDay) 
     ); 
    } 
} 
0

私は.NETでdatediffメソッドを使用します。日付のどの部分を間隔として使用するかを指定できます。だから、まず彼らは同じ日以内にいることをテストしたいと思うでしょう。間隔として日を指定します。結果はゼロになるはずです。その後、時間、分、秒などを見つけることができます。私はそれがあなたに分数の部分を与えると確信しています:1時間、45分対1.75時間105分。それからちょうど「時間帯」は `TimeSpan` http://msdn.microsoftではないようですね(カスタムのですか?私は推測しているもの)あなたのタイムスロットクラスに

関連する問題