Я знаю, что этот вопрос задан много раз, но у меня небольшой поворот. Есть много разных сдвигов на работе, и у меня есть две строки shiftStart и shiftEnd. (пример "18:00:00 PM" & "03:00:00 AM" соответственно). Это составляет полдень к утру. Я пытаюсь сделать функцию, которая говорит мне, если DateTime.Now находится в пределах этого временного периода.Текущее время в диапазоне
Примечание:сдвиг может быть что-нибудь ... утром до полудня, в полдень до утра, не фиксированной длительности (например, 8 часов).
static bool NowWithinShiftTime("6:00:00 PM", "03:00:00 AM")
Ниже то, что я пытался, но независимо от того, что я делаю, я не могу найти логику ... Пожалуйста, помогите мне ...
static bool NowWithinShiftTime(string shiftStart, string shiftEnd)
{
DateTime startDate;
DateTime endDate;
DateTime now = DateTime.Now;
TimeSpan startTime = DateTime.Parse(shiftStart).TimeOfDay;
TimeSpan endTime = DateTime.Parse(shiftEnd).TimeOfDay;
if (startTime < endTime) // same day
{
startDate = new DateTime(now.Year, now.Month, now.Day) + startTime;
endDate = new DateTime(now.Year, now.Month, now.Day) + endTime;
}
else // next day
{
startDate = new DateTime(now.Year, now.Month, now.AddDays(-1).Hour) + startTime;
endDate = DateTime.Today.AddDays(1) + endTime;
}
if (now >= startDate && now <= endDate)
{
return true;
}
else
{
return false;
}
}
'now.AddDays (1) .Hour '<- Что? Зачем вам это делать? – Katniss
@ 666bytes: Вы должны предпочесть 'startDate = DateTime.Today + startTime', намного короче и понятнее. На завтра, 'AddDays (1)' как обычно. – Jon