Страницы

Поиск по вопросам

воскресенье, 5 января 2020 г.

Непонятная работа UNIX_TIMESTAMP

#mysql #дата


select UNIX_TIMESTAMP('2008-11-02 00:59:00');
1225601940

select UNIX_TIMESTAMP('2008-11-02 01:00:00');
1225605600

select UNIX_TIMESTAMP('2008-11-02 01:00:00') - UNIX_TIMESTAMP('2008-11-02 00:59:00')
3660

Но UNIX_TIMESTAMP возвращает результат в секундах, почему разница 3660 секунд если
должно быть 60?    


Ответы

Ответ 1



Из UNIX_TIMESTAMP(date) документации: The server interprets date as a value in the current time zone and converts it to an internal value in UTC. emphasize mine то есть 2008-11-02 01:00:00 это не UTC время и поэтому значение UNIX_TIMESTAMP зависит от часового пояса, используемого базой данных (по умолчанию совпадает с поясом, используемым системной временно́й зоной). Часовой пояс может меняться, например, из-за перехода с летнего времени на стандартное (как упомянул @alexander barakin), местное время может прыгнуть на час назад, что увеличивает разницу в данном случае (из двух повторяющихся значений местного времени, выбрано более позднее). Пример, который явно смещение от UTC показывает (на Питоне): >>> import pendulum # $ pip install pendulum >>> dt = pendulum.create(2008, 11, 2, 0, 59, tz='America/New_York') >>> dt.timestamp() 1225601940.0 >>> dt.add(seconds=3660) >>> dt.add(seconds=60) Видно, что моменты времени +00:01:00 и +01:01:00 в будущее имеют одинаковое местное время 1am, но разные часовые пояса (с летнего на зимнее время переход произошёл): >>> dt.add(seconds=60).tzname() 'EDT' >>> dt.add(seconds=3660).tzname() 'EST'

Ответ 2



дата 2008/11/02 — это второе воскресенье ноября, которое в некоторых странах (например, в канаде) является датой перевода часов с летнего на зимнее время (чаще всего именно в час ночи). выбором подобной временно́й зоны на сервере, где выполнялись указанные команды, и можно объяснить разницу в 61 минуту реального времени (измеряемого, в случае unix time stamp, секундами, прошедшими с полуночи первого января 1970 года) между двумя временны́ми отметками 2008-11-02 01:00:00 и 2008-11-02 00:59:00.

Комментариев нет:

Отправить комментарий