Страница 1 из 1

Переход на летнее время

Добавлено: Вс мар 29, 2009 2:29 pm
chtito2
После автоматического перехода на летнее время (FreeBSD 7.1) перестал пускать вечерние пакеты в 19:00: Not allow time. Есть ли какие-то продвижения в этом, чтобы самому не раскапывать? Перевод всего и вся на UTC не предлагать.

P.S.: надеюсь это только сегодня глючит, когда 1 час был украден между 2 и 3 ночи если не ошибаюсь (с 2am сразу прыгнуло на 4am минув 3am).

Добавлено: Вс мар 29, 2009 6:53 pm
chtito2
Кажется нашел решение: если эти строчки в запросах:
UNIX_TIMESTAMP(),
UNIX_TIMESTAMP(DATE_FORMAT(FROM_UNIXTIME(UNIX_TIMESTAMP()), '%Y-%m-%d')),
заменить на
TIME_TO_SEC(FROM_UNIXTIME(UNIX_TIMESTAMP(), '%H:%i:%s')),
0,
то по идее работает правильно т.к. нигде не участвуют временные зоны, а только лишь смещения внутри суток в секундах. Правда менять продакшн боязно ;)

Добавлено: Вс мар 29, 2009 7:16 pm
chtito2
Поменял - заработало правильно :)

Добавлено: Вс мар 29, 2009 11:46 pm
Abram
Неплохой монолог :D
~Asmodeus~-у на заметку.

Добавлено: Пн мар 30, 2009 1:52 pm
ran
chtito2 писал(а):Поменял - заработало правильно :)
а в обратную сторону не пробовал? типа осенью :)

Добавлено: Пн мар 30, 2009 2:16 pm
~AsmodeuS~
так в эту сторону тоно не у кого не должно было ничего случиться

Добавлено: Пн мар 30, 2009 2:22 pm
ran
~AsmodeuS~ писал(а):так в эту сторону тоно не у кого не должно было ничего случиться
та нет... скажем ночные усеры с пакетом с 21:00 смогли подключиться только в 22:00 - до этого момента - Not allow time... после перехода через границу следующих суток (с воскресенья на понедельник) всё нормализовалось

смена летнее/зимнее время происходит путём смены таймзоны... соответственно как справедливо заметил чтито, вычилять временные интервалы, используя таймзону нельзя

Добавлено: Вт мар 31, 2009 11:59 am
chtito2
~AsmodeuS~ писал(а):так в эту сторону тоно не у кого не должно было ничего случиться
Святая наивность :) Коротко: в remaining_time() разница между $session_start и $day_begin вернет на 1 час меньше секунд весь день, в который произошел переход на летнее время (получается когда в такой день на настенных часах 19:00 на самом деле с начала суток прошло только 18 часов т.е. 18*3600 секунд, что физически правильно, а локально - нет). Мое изменение просто считает кол-во секунд прошедших с настенных (или наручных :)) 00:00 - простая арифметика, и в 19:00 с начала суток пройдет 19*3600 секунд в какую бы часть планеты Земля сервер ни занесло.
ran писал(а):
chtito2 писал(а):Поменял - заработало правильно :)
а в обратную сторону не пробовал? типа осенью :)
Неа. А мы куда-то торопимся? Не первый год вместе :)
ran писал(а):та нет... скажем ночные усеры с пакетом с 21:00 смогли подключиться только в 22:00 - до этого момента - Not allow time... после перехода через границу следующих суток (с воскресенья на понедельник) всё нормализовалось
С одним примечанием: если используется Радиус и если юзер зашел до смены пояса (у нас в 04:00am) и связь у него ни разу не прервалась до конца интервала, то он выйдет по часам на 1 час позже. На самом деле посидит ровно сколько должен, но поди докажи это шефу :) Конечно куда хуже когда зайти не может в положенное по часам время... А все из-за неправильного использования.