Сравните текущее время с целым числом даты эпохи

Целое число даты эпохи включает год, месяц, день, час, минуты и секунды, когда оно преобразуется в "человеческую дату", но как я могу сравнить время эпохи с определенным временем дня (например, 13:45)

Другими словами, если я получаю дату эпохи из программы в виде целого числа, и я хочу написать программу, которая проверяет, наступило ли время этой эпохи после 13:45 того же дня, какой была бы логика для этого?

У меня есть дата эпохи в поле dabatase и определенное время (13:45) в другом поле, и мне нужно проверять, является ли оно 13:45 или позже, каждый раз, когда я проверяю текущую дату. Я использую DB2, но это не имеет особого значения, потому что я хочу понять логику (если возможно, математически) сравнения времени с целой датой эпохи и посмотреть, совпадает ли она.

Спасибо

1 ответ

Предполагая, что под "датой эпохи" вы подразумеваете метку времени Unix (которая основана на UTC), то логически:

  1. Интерпретировать целочисленную метку времени Unix как дату и время в формате UTC.
  2. Конвертировать из UTC в соответствующий часовой пояс.
  3. Возьмите дату из шага 2 и сопоставьте ее с указанием времени суток.
  4. Убедитесь, что новые дата и время суток действительны в выбранном часовом поясе, и устраните неоднозначность, если существует более одной интерпретации. Это важно для значений вблизи переходов на летнее время. Смотрите DST тег вики для более подробной информации.
  5. Преобразуйте локальную дату и время с шага 3 и любые корректировки, определенные на шаге 4, и преобразуйте их в дату и время на основе UTC.
  6. Сравните значение из шага 5 со значением из шага 1. (В качестве альтернативы получите новую метку времени Unix из этого значения и сравните ее с исходной меткой времени Unix.)

Обратите внимание, что вы не можете выполнить эту задачу без понимания соответствующего часового пояса. В идеале часовой пояс должен быть стандартным идентификатором часового пояса IANA/Olson, например America/Los_Angeles или же Europe/Paris, и вам понадобится поддержка для работы с теми, кто находится в вашем приложении или базе данных. Обратитесь к тегу часового пояса вики.

Также обратите внимание, что мы сравниваем не местное время, а время UTC. Причина в том, что местное время может быть неоднозначным, и вполне возможно, что результат будет другим, если вы выберете первое вхождение вместо второго, или наоборот.

Другие вопросы по тегам