당신이 판단 할 일의 특정 시간을 가정하면 이벤트 커버하는 경우 그것과 관련된 날짜에 관계없이 고려해야 할 4 가지 경우가 있습니다. 첫째로 날짜가 1 일 이상 떨어져 있다면 그들은 하루 중 모든 시간을 다룹니다. 시작 시간이 시간보다 길고 끝 시간이 시간보다 길면 시간이 포함됩니다. 마지막 두 가지 경우는 종료 날짜가 시작 날짜의 다음날이어야하고 시작 날짜가 시간보다 길거나 종료 날짜가 시간보다 늦은 시간이어야합니다. 시작 날짜가 종료 날짜 이전임을 가정합니다.
var events = new List<Tuple<DateTime, DateTime>>
{
// start and end after time of day but on different days
Tuple.Create(
new DateTime(2017, 02, 17, 22, 0, 0),
new DateTime(2017, 02, 18, 15, 0, 0)),
// start and end before time of day but on different days
Tuple.Create(
new DateTime(2017, 02, 17, 9, 0, 0),
new DateTime(2017, 02, 18, 7, 0, 0)),
// start before and end after same day
Tuple.Create(
new DateTime(2017, 02, 17, 9, 0, 0),
new DateTime(2017, 02, 17, 11, 0, 0)),
// covers more than 1 day
Tuple.Create(
new DateTime(2017, 02, 17, 22, 0, 0),
new DateTime(2017, 02, 18, 22, 0, 1)),
// start after and end before on different days
Tuple.Create(
new DateTime(2017, 02, 17, 22, 0, 0),
new DateTime(2017, 02, 18, 10, 0, 0)),
// start and end before on same day
Tuple.Create(
new DateTime(2017, 02, 17, 7, 0, 0),
new DateTime(2017, 02, 17, 8, 0, 0)),
// start and end after on same day
Tuple.Create(
new DateTime(2017, 02, 17, 11, 0, 0),
new DateTime(2017, 02, 17, 12, 0, 0)),
};
var timeOfDay = new TimeSpan(0, 10, 0 ,0);
foreach (var x in events)
{
if (x.Item2 - x.Item1 > TimeSpan.FromDays(1)
|| (x.Item1.TimeOfDay < timeOfDay && x.Item2.TimeOfDay > timeOfDay)
|| (x.Item1.Date < x.Item2.Date
&& (x.Item1.TimeOfDay < timeOfDay || x.Item2.TimeOfDay > timeOfDay)))
{
Console.WriteLine(x);
}
}
윌
(2/17/2017 10:00:00 PM, 2/18/2017 3:00:00 PM)
(2/17/2017 9:00:00 AM, 2/18/2017 7:00:00 AM)
(2/17/2017 9:00:00 AM, 2/17/2017 11:00:00 AM)
(2/17/2017 10:00:00 PM, 2/18/2017 10:00:01 PM)
그래서 그냥 이벤트가있는 날 (10)을 다루고 있는지 알고 싶어 출력? 즉, 확인해야 할 특정 'DateTime'이 없습니까? – juharr
참고 사항 : 개체의 이름을 다른 것으로 지정하십시오. 이것을 WinForms 앱에 넣으면 "이벤트"가 빨리 혼란 스러울 것입니다. 개체 이름으로 키워드를 사용하지 않도록하십시오. 내가 코드를 호출하기 전에, 키워드가 객체 이름으로 사용되었다는 것을 발견하면 항상 동의어 사전을 먼저 읽습니다.이 경우는 "활동"이 더 나은 방법 일 수 있습니다. – CDove
@ user1895086 좋은 조언 주셔서 감사합니다. –