Как определить, находится ли временная метка в пределах рабочего времени? - PullRequest
2 голосов
/ 28 мая 2011

Учитывая любую временную метку Unix (например, 1306396801), которая переводится в 26.05.2011 08:00:01, как я могу определить, находится ли она в заданном временном интервале (то есть 08:00:00 и 16:00:00)?

Это должно работать на любой день. Я просто хочу знать, находится ли эта временная метка в заданном временном интервале, в любой будущий (или прошлый) день, дата не важна. Мне все равно, будет ли он 25-го или 26-го, если это будет с 08:00 до 16:00.

Я в поиске Java-решения, но любой псевдокод, который работает, будет в порядке, я просто преобразую его.

До сих пор я пытался преобразовать его в Java-календарь, считывать значения часов / мин / с и сравнивать их, но это только открыло большую банку червей. Если интервал времени, который мне нужен, равен 16.30, я не могу просто проверить tsHour> frameStartHour && tsMin> frameStartMin, так как это отбросит все метки времени, у которых есть минутная часть> 30.

Спасибо, что посмотрели на это:)

Чтобы уточнить. Я использую и ссылаюсь только на время UTC, моя временная метка указана в формате UTC, а диапазон, в котором я хочу, указан в UTC.

Ответы [ 5 ]

4 голосов
/ 28 мая 2011

Я думаю, я понимаю, что вы хотите. Вы хотите проверить на любой день, если это между 8:00 и 16:00 UTC. Возьмите мод времени 24 * 3600. Это даст вам количество секунд, прошедших в течение дня. Тогда вы просто сравните, что это между 8 * 3600 и 16 * 3600. Если вам нужно иметь дело с часовыми поясами, все становится сложнее.

2 голосов
/ 28 мая 2011

Если я вас правильно понял, вам нужно лишь нормализовать даты к общему значению. Создайте три экземпляра Календаря - один с вашим временем, но днем, месяцем и годом, установленным на ноль, и два с началом и концом вашего периода, остальные поля также обнуляются. Затем вы можете использовать Calendar.after () и Calendar.before (), чтобы увидеть, находится ли дата в диапазоне.

1 голос
/ 28 мая 2011

Учитывая вашу временную метку (в секундах) и желаемый часовой пояс, Jodatime дает вам час, который приводит вас к простой проверке целочисленного диапазона.

new org.joda.time.DateTime(timestamp*1000L, zone).getHourOfDay()

С помощью java.util. * это сложнее.

1 голос
/ 28 мая 2011

Ваша метка времени Unix является абсолютным временем.Ваши временные рамки относительно.Вам нужна какая-то информация о часовом поясе, чтобы решить эту проблему.Я просто ответил на некоторые из них для PostgreSQL несколько минут назад.Надеюсь, эта статья пригодится.

0 голосов
/ 28 мая 2011

Конвертируйте начало вашего диапазона в метку времени Unix, а конец вашего диапазона в метку Unix Tmestamp, тогда это простая целочисленная проверка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...