複数の時間範囲が与えられていると、現在の時刻がどの時間範囲に属するのかを調べる必要があります。 DateTimeの日付部分を無視して、これをより効率的に行うにはどうすればよいですか。時間範囲でオーバーラップを見つける
TimeSlot.Overlaps(DateTime currTime)
メソッドは日付部分を無視し、その部分のみを一致させる必要があります。
複数の時間範囲が与えられていると、現在の時刻がどの時間範囲に属するのかを調べる必要があります。 DateTimeの日付部分を無視して、これをより効率的に行うにはどうすればよいですか。時間範囲でオーバーラップを見つける
TimeSlot.Overlaps(DateTime currTime)
メソッドは日付部分を無視し、その部分のみを一致させる必要があります。
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)
);
}
}
私は.NETでdatediffメソッドを使用します。日付のどの部分を間隔として使用するかを指定できます。だから、まず彼らは同じ日以内にいることをテストしたいと思うでしょう。間隔として日を指定します。結果はゼロになるはずです。その後、時間、分、秒などを見つけることができます。私はそれがあなたに分数の部分を与えると確信しています:1時間、45分対1.75時間105分。それからちょうど「時間帯」は `TimeSpan` http://msdn.microsoftではないようですね(カスタムのですか?私は推測しているもの)あなたのタイムスロットクラスに
を開始と終了の日付時刻を比較します。 com/ja-us/library/system.timespan.aspxはそれですか?そうでない場合、それは何ですか? 'TimeSlot'とは何ですか? –
TimeSlotは、StartTimeプロパティとEndTimeプロパティを持つカスタムクラスです – Faisal