На самом деле, если мы снова имеем дело с чисто часов здесь как абелевой кольцо от 0 до 23 и 0, я считаю следующее фактически рабочий раствор:
(start <= end && start <= t && t <= end) or (start > end && (start <= t || t <= end))
комплекс, хотя это , это, по сути, if-else, где у вас есть другой алгоритм в зависимости от того, начинается ли < = конец или нет, где t
- это время, которое вы хотите проверить. В первом случае начало и конец - это нормальный порядок, поэтому t должен быть как больше, чем начальный, так и меньше, чем конец.В том случае, когда начало больше, чем конец, время за пределами противоположного диапазона, что мы хотим:
- НЕ (конец < т и т < начало)
Используя теорему де Моргана:
- НЕ (конец < т) или нет (т < старт)
- НЕ (т < старт) или нет (конец < т)
- т> = начало или конец> = т
- начало < = т или т = < конец
Это должно решить ваши и мои проблемы.
@JonSkeet
Дело в том, глядя на ваш алгоритм, давайте предположим, что на данный момент времени 1 утра, день 1.
- теперь держит день 1 утра 1
- Сегодня проводит день в полночь 1
- Start имеет 5 вечера День 1 (учитывая оригинальный пример)
- End имеет 2Ат День 1 (опять же из примера)
- Конец держит 2Ат День 2 (с момента запуска> конец)
Теперь, если я не ошибаюсь, начать ≰ сейчас, так как старт 5 вечера День 1 и теперь 1 утра День 1, который до сих пор, поэтому тест не пройден но исходный вопрос хотел 1am, включенный в диапазон с 1 утра, между 5:00 и 2:00. Я что-то пропустил?
@ Брайан
Кроме того, глядя на свой код, я думаю, что вы можете обнаружить 1Am но теперь вы имеете проблему с 10pm (22:00), так как ваше время стать:
- Start is 17
- Конец составляет 26
- Сейчас 22 + 24 = 46! так что вы потерпите неудачу при тестировании менее.
Очевидно, что общий случай очень сложный! Более того, когда вы ограничены таблицами Google, как и я.
Что вы подразумеваете под «часами между 2-х раз верно»? правда в каком смысле? – hunter
@hunter, я считаю, что мы хотим, чтобы текущее время находилось между двумя указанными временами. Псевдокод говорит: если (час между часом начала и конечным часом) ... – DOK
Я имею в виду, каждый день, когда текущий час> 17 (5 вечера) и час <2 утра, dosomething(). else donothing – Kellyh