VICK
Предположим, у нас есть диапазон дат a
какое время начала и окончания указано ниже
a.start = '1900-01-01 08:00:00.000'; i.e 8am
a.end = '1900-01-01 17:00:00.000'; i.e. 5pm
и мы хотим проверить, совпадает ли он с существующими диапазонами или нет.
предположим, что один из предыдущих диапазонов
b
которые имеют время начала и окончания, как показано ниже,
b.start = '1900-01-01 23:00:00.000'; i.e 11pm
b.end = '1900-01-01 09:00:00.000'; i.e. 9am
таким образом, b имеет период перекрытия с 8 утра до 9 утра с a, так как временные интервалы являются перекрестными днями, поэтому я нахожу перекрытие, как показано ниже.
bool isOverLapping = false;
a = FirstRange;
double basehours = (a.end - a.start).TotalHours;
if (basehours <= 0)
{
basehours = basehours + 24;
}
foreach(var b in previousRanges)
{
double alpha1 = (b.start - a.start).TotalHours;
if (alpha1 <= 0)
{
alpha1 = alpha1 + 24;
}
double alpha2 = (b.end - a.start).TotalHours;
if (alpha2 <= 0)
{
alpha2 = alpha2 + 24;
}
if (basehours <= alpha1 && basehours <= alpha2)
{
isOverLapping = false;
}
else
{
isOverLapping = true;
}
}
Я надеюсь, что это поможет кому-то, кто сталкивается с этой проблемой так же, как и я.
phil.o
Однажды мне пришлось все это устроить, боюсь, что на этот вопрос можно ответить очень быстро. Я помню, что создал Range
структура, и что есть несколько способов, которыми два диапазона могут перекрываться или нет. Итак, AreOverlapping
результат будет использовать комбинацию нескольких из этих способов.
Я тоже это помню
Яни Giannoudis[^]'статьи Библиотека временных периодов для .NET[^ это очень помогло мне понять и смоделировать процесс.
К сожалению, у меня больше нет этого кода. Это было для версии MSCRM, с которой я был так счастлив перестать работать.
VICK
На самом деле я не получил никакого метода от TimePeriodLibrary относительно проблемы TimeRange без сравнения частей даты. Или же я не мог понять его в глубине.
Было бы очень приятно, если бы вы могли сделать фрагмент кода, используя эту библиотеку в соответствии с моим вышеупомянутым сценарием?
phil.o
Как я уже говорил вам, то, что мне пришлось настроить, не было решением "быстрого фрагмента", и я боюсь, что это не подойдет для форума быстрых ответов. Вы не можете двигаться вперед, если считаете, что вам не нужно сравнивать с частью даты. Часть даты так же важна, как и часть времени, если периоды, которые вы хотите сравнить, перекрываются на одной или нескольких дневных границах.