Я искал некоторые разъяснения относительно поведения интервалов и того, что люди (разработчики) думают о включении конечных точек.
Когда мы говорим об интервалах времени (например, с 01.00 до 02.00), я думаю, что мы все думаем, что это так и заканчиваем исключением: «математически» [01:00, 02:00)
. Я думаю, что это ясно и просто. Если нет, скажите мне, почему.
Но когда мы говорим об интервалах дат (пример: с 14.03.2019 по 22.05.2020), я не знаю, какое поведение люди ожидают. Я обычно думаю, как [14.3.2019, 22.5.2020]
. Это означает, что 23:59:59.999, 22.5.2020
включено, как выражение: [14.3.2019, 23.5.2020)
.
Вопрос об этом фрагменте кода (упрощенно):
public class DateInterval{
public readonly DateTime Start;
public readonly DateTime End;
//Enum (0= both, 1= start, 2= end)
private readonly EndPointInclusionBehaviour _behaviour
private DateTimeInterval(DateTime start, DateTime end){
//Obvious
Start= start.Date;
//This is grinding my gears, have I to do this?
End= end.Date.AddDays(1);
_behaviour = EndPointInclusionsBehaviour.IncludeStart;
//Or this?
End= end.Date.AddMilliseconds(-1);
_behaviour = EndPointInclusionsBehaviour.IncludeBoth;
//Or even this?
End= end.Date;
_behaviour = EndPointInclusionBehaviour.IncludeStart;
//or this?
End= end.Date.AddDays(1).AddMilliseconds(-1);
_behaviour = EndPointInclusionsBehaviour.IncludeBoth;
}
}
Какое поведение вы ожидаете?