|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Как на сервере FB4 определить из какой временной зоны работает пользователь? Можно как-то в event CONNECT или TRANSACTION START определить таймзону или хотя бы время пользователя? Или только вариант после подключения в контекст сессии записать то, что прислал клиент? В нэймспейсах ничего нового в этом направлении нет. И если клиент делает set time zone 'America/Sao_Paulo'; как на сервере определить, что клиент сменил таймзону? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 19:00 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
А зачем ? В чём задача состоит ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2019, 20:02 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeep, по моему, от этого абсолютно никакого профита, так как пользователь может поменять часовой пояс вручную или ОС пользователя может автоматически изменить часовой пояс при смене пользователем геолокации, либо при смене IP адреса ОС решит, что пользователь сменил геолокацию, если геолокация пользователя включена только по IP. Море факторов! Ты не можешь контролировать ни правильность часового пояса, ни правильность локального времени. Тогда как на своём сервере, время которого синхронизировано, например, с "Государственным первичным эталоном времени РФ" через NTP серверы ВНИИ ФТРИ или через NTP сервер с синхронизацией по ГЛОНАСС и прописав в триггерах до обновления назначение текущего времени для интересующих тебя полей, ты будешь иметь в этих полях непротиворечивое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 11:35 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
В целом пока интересуюсь этим вопросом только в связи с задачей журналирования операций пользователей. Сейчас в каждой таймзоне у нас свой сервер и журнал операций заполняется значениями с localtime. С переходом на fb4 появляется возможность собрать все региональные базы в одну, и показалось заманчивым иметь возможность журналировать операции не только по времени сервера, но и по времени клиента. А то придется принимать во внимание и вычислять для отображения, что новосибиские заказы последний раз редактировались пользователем из Новосибирска не в 5:00 (МСК), а в 9:00 (НВС). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:27 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeep, ну так в самом таймстампе будет стоять таймзона того сервера, где выполнялся current_time\current_datetime ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:39 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeepА то придется принимать во внимание и вычислять для отображения, что новосибиские заказы последний раз редактировались пользователем из Новосибирска не в 5:00 (МСК), а в 9:00 (НВС).5 утра по Москве и 9 дня по Новосибирску, это тоже самое время, которое будет хранится на сервере по UTC, а на клиенте оно уже будет приведено к локальному времени клиента с учётом часового пояса. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:45 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
hvladalex deeep, ну так в самом таймстампе будет стоять таймзона того сервера, где выполнялся current_time\current_datetimeРазве таймзона хранится вместе со штампом времени? Я в полной уверенности, что таймзона используется сервером только для вычисления штампа времени по UTC и клиентом для приведения полученного от сервера штампа времени к времени таймозны клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:49 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devhvladalex deeep, ну так в самом таймстампе будет стоять таймзона того сервера, где выполнялся current_time\current_datetimeРазве таймзона хранится вместе со штампом времени? Я в полной уверенности, что таймзона используется сервером только для вычисления штампа времени по UTC и клиентом для приведения полученного от сервера штампа времени к времени таймозны клиента.Ми пардон! Я заблуждался. TIME/TIMESTAMP WITH TIME ZONE has respectively the same storage of TIME/TIMESTAMP WITHOUT TIME ZONE plus 2 bytes for the time zone identifier or displacement. The time/timestamp parts are stored in UTC (translated from the informed time zone). Time zone identifiers (from regions) are put directly in the time_zone field. They start from 65535 (which is the GMT code) and are decreasing as new time zones were/are added. Time zone displacements (+/- HH:MM) are encoded with `(sign * (HH * 60 + MM)) + 1439`. For example, a `00:00` displacement is encoded as `(1 * (0 * 60 + 0)) + 1439 = 1439` and `-02:00` as `(-1 * (2 * 60 + 0)) + 1439 = 1319`. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 16:55 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
hvladalex deeep, ну так в самом таймстампе будет стоять таймзона того сервера, где выполнялся current_time\current_datetime Так сервер же будет один для всех регионов. Поэтому current_time для триггеров/процедур будет всегда московский (в моем случае). ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:05 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_dev5 утра по Москве и 9 дня по Новосибирску, это тоже самое время, которое будет хранится на сервере по UTC, а на клиенте оно уже будет приведено к локальному времени клиента с учётом часового пояса. Пользователи центрального офиса имеют доступ ко всем региональным заказам и им важно понимать, когда кто менял заказ по локальному времени региона, а не по времени центрального офиса. Это значит нужно приводить время к нужному часовому поясу по информации о пользователе. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:09 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeepТак сервер же будет один для всех регионов. Поэтому current_time для триггеров/процедур будет всегда московский (в моем случае). Только если это коннект через терминальный сервер. При нормальном коннекте с нормального клиента там будет часовой пояс клиента насколько я в курсе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:13 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeephvladalex deeep, ну так в самом таймстампе будет стоять таймзона того сервера, где выполнялся current_time\current_datetime Так сервер же будет один для всех регионов. Поэтому current_time для триггеров/процедур будет всегда московский (в моем случае). Зависит от приложения doc\sql.extensions\README.time_zone.mdSET TIME ZONE statement Changes the session time zone. Syntax SET TIME ZONE { <time zone string> | LOCAL } ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:22 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПри нормальном коннекте с нормального клиента там будет часовой пояс клиента насколько я в курсе.Я не вижу, чтобы этот тег вставлялся fbclient'ом самостоятельно ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:26 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
hvladЯ не вижу, чтобы этот тег вставлялся fbclient'ом самостоятельно Действительно. Хотя по идее должен бы. И вроде бы это даже обсуждалось в девеле. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:30 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Ага, прочитал внимательно еще раз In version 4.0, CURRENT_TIME and CURRENT_TIMESTAMP now return TIME WITH TIME ZONE and TIMESTAMP WITH TIME ZONE, with the time zone set by the session time zone Теперь еще тучу процедур и триггеров пересматривать, которые ориентированы на то, что CURRENT_TIMESTAMP returns the current server date and time. А где теперь, простите, серверное время? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:49 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeeprdb_dev5 утра по Москве и 9 дня по Новосибирску, это тоже самое время, которое будет хранится на сервере по UTC, а на клиенте оно уже будет приведено к локальному времени клиента с учётом часового пояса. Пользователи центрального офиса имеют доступ ко всем региональным заказам и им важно понимать, когда кто менял заказ по локальному времени региона, а не по времени центрального офиса. Это значит нужно приводить время к нужному часовому поясу по информации о пользователе.Попробуй это: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 17:49 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
alex deeepА где теперь, простите, серверное время?LOCALTIME ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 19:40 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
hvladalex deeepА где теперь, простите, серверное время?LOCALTIME А вот и нет... C:\Program Files\Firebird\Firebird_4_0>isql Use CONNECT or CREATE DATABASE to specify a database SQL> connect e:\test\test.fdb user SYSDBA password masterkey; Database: e:\test\test.fdb, User: SYSDBA SQL> SELECT localtime, current_time FROM RDB$DATABASE; LOCALTIME CURRENT_TIME ============= ============================================== 21:44:47.0000 21:44:47.0000 Europe/Moscow SQL> set time zone 'Asia/Novosibirsk'; SQL> SELECT localtime, current_time FROM RDB$DATABASE; LOCALTIME CURRENT_TIME ============= ============================================== 01:45:15.0000 01:45:15.0000 Asia/Novosibirsk ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 21:50 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Да, так не получится. А вот через гланды - всё же можно. Сначала Код: sql 1. 2.
Далее Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Ну и проверка Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 22:38 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
С другой стороны - а зачем ? Задавай правила на сервере с использованием 'Asia/Novosibirsk' (если так хочется) - и всё ... |
|||
:
Нравится:
Не нравится:
|
|||
11.06.2019, 22:39 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Чуточку офтопну в этом топике, иначе у меня "новая тема" опять в "Пятницу" улетит. Наткнулся со штампами времени на несколько довольно странных, э-э-э... Багов? Не очень понимаю, с чем это может быть связано. 1. Приведения строки '0001-01-01 00:00:00.100 UTC' с часовым поясом к TIMESTAMP WITH TIME ZONE валит ошибку 'expression evaluation not supported. value exceeds the range for valid timestamps.' Не работает: Код: plsql 1. 2.
Работает (выдаёт значение 97 !): Код: plsql 1. 2. 3. 4.
Работает: Код: plsql 1.
2. Слишком большие различия при расчёте в DATEDIFF через дни и через миллисекунды. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:07 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_dev, где в это время была Москва? Что тебе даст аналогичный эксперимент например в Яве? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:34 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Хотя, если в строке: Код: plsql 1. 2. 3.
у 'ts' убрать AT TIME ZONE 'UTC', несоответствие уходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:36 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Симонов Денисrdb_dev, где в это время была Москва? Что тебе даст аналогичный эксперимент например в Яве?Какая разница, где была Москва, если 'Europe/Moscow', это, всего лишь, идентификатор часового пояса UTC+3? Или в Рождество Христово планета Земля на время остановила своё вращение? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:38 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_dev, в это время вообще часовых поясов не существовало если что. В базе часовых поясов у любой тайм-зоны есть дата начала и дата окончания для смещения. Возьми и выведи все существующие смещения для Europe/Moscow может тогда поймёшь откуда такая фигня вылезла. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:43 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Симонов Денис, не существовало ПОНЯТИЯ часовых поясов, но так как жители населённых пунктов определяли время по солнцу, разница во времени, всё же, была, что очевидно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:48 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devразница во времени, всё же, была, что очевидно. А для тебя неочевидно, что эта разница устанавливается и закрепляется постановлениями правительств? Считай, что допустимые значения для типов с часовым поясом начинаются с 1970-х, не раньше. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 16:09 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovrdb_devразница во времени, всё же, была, что очевидно. А для тебя неочевидно, что эта разница устанавливается и закрепляется постановлениями правительств? Считай, что допустимые значения для типов с часовым поясом начинаются с 1970-х, не раньше.По твоему, это должно влиять на методы расчётов от/к штампу времени в конкретной географической точке? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 16:26 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devНе работает: Код: plsql 1. 2.
Не было ни Europe, ни, тем более Moscow в этом году. Хочешь выёживаться с такими датами - используй явно заданное смещение, например '+3:00' ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 16:27 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devПо твоему, это должно влиять на методы расчётов от/к штампу времени в конкретной географической точке? Да. Ты, надеюсь, не забыл про "летнее время" и его свистопляску? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 16:33 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovДа. Ты, надеюсь, не забыл про "летнее время" и его свистопляску?Это вообще тихий ужас! Поэтому имеет смысл только штамп времени UTC, который не зависит от таких переходов. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 16:36 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devКакая разница, где была Москва, если 'Europe/Moscow', это, всего лишь, идентификатор часового пояса UTC+3?Грубое заблуждение. Идентификатор часового пояса это сдвиг "от Гринвича" И правила перехода на зимнее-летнее время. UTC+3 - ни разу не эквивалент Europe/Moscow ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 17:38 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Basil A. SidorovИдентификатор часового пояса это сдвиг "от Гринвича" И правила перехода на зимнее-летнее время. UTC+3 - ни разу не эквивалент Europe/MoscowСейчас эквивалент, пока в голову какому-нибудь деятелю опять не пришла в голову мысль вернуть переход на зимнее и летнее время. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 06:02 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Ещё на одну "фичу" наткнулся: Код: plsql 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 09:22 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devСейчас эквивалент, пока в голову какому-нибудь деятелю опять не пришла в голову мысль вернуть переход на зимнее и летнее время.А в date'0001-01-01' - не эквивалент. И ещё в кучке интервалов, когда менялся и сдвиг относительно мирового времени или/и когда менялись правила перехода зимнее-летнее время. P.S. Поставишь союз "и", выделишь его И шрифтом И регистром - нет, всё равно найдётся э-э-э... умник, который считает, что он уже во всём разобрался и проникся дзеном. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 09:48 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Basil A. SidorovА в date'0001-01-01' - не эквивалент. И ещё в кучке интервалов, когда менялся и сдвиг относительно мирового времени или/и когда менялись правила перехода зимнее-летнее время.Ой, да брось! Вращение Земли никто не отменял и если спроецировать сегодняшнее понятия "Линия перемены дат" и/или "Гринвичский меридиан" на '0001-01-01', то относительно этих современных понятий, расчёты даты и времени не дадут какой-либо серьезной погрешности в каком-либо часовом поясе без учёта перехода на "зимнее время", которое, обычно, уменьшает время в часовом поясе на один час и которым, в некоторых случаях, можно пренебречь. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 10:18 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_dev, научись отличать географию (+3) от политики (Europe\Moscow). Первая не меняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 10:19 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devбез учёта перехода на "зимнее время"Переходят на летнее время, узнай уже хоть что-нибудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 10:20 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_dev, успокойся уже. Всяческие переходы на зимнее/летнее время в нашей стране ввёл Ленин до этого никаких переходов не было. Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 10:35 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
hvladrdb_dev, научись отличать географию (+3) от политики (Europe\Moscow). Первая не меняется.Вот сам и научись! 'Europe/Moscow' это идентификатор из справочника часовых поясов IANA Time Zone Database , обозначающий часовой пояс UTC+3, и который никакого отношения к политике и административному делению на часовые пояса внутри государства не имеет, а скорее наоборот. К "политике" же относится правило UTC DST - Daylight Saving Time rule . ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 10:48 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_devВот сам и научись! 'Europe/Moscow' это идентификатор из справочника часовых поясов IANA Time Zone Database , обозначающий часовой пояс UTC+3, и который никакого отношения к политике и административному делению на часовые пояса внутри государства не имеет цитата из первоисточникаtzdata2019a/europe: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 11:02 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
rdb_dev'Europe/Moscow' это идентификатор из справочника часовых поясов IANA Time Zone Database , обозначающий часовой пояс UTC+3, и который никакого отношения к политике и административному делению на часовые пояса внутри государства не имеет Вот тут я неправ! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 11:03 |
|
Firebird 4 - получить timezone сессии?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, эта цитата из первоисточника более понятна: Timezone identifiers The naming conventions attempt to strike a balance among the following goals: *Uniquely identify every timezone where clocks have agreed since 1970. This is essential for the intended use: static clocks keeping local civil time. *Indicate to experts where the timezone's clocks typically are. *Be robust in the presence of political changes. For example, names are typically not tied to countries, to avoid incompatibilities when countries change their name (e.g., Swaziland→Eswatini) or when locations change countries (e.g., Hong Kong from UK colony to China). There is no requirement that every country or national capital must have a timezone name. *Be portable to a wide variety of implementations. *Use a consistent naming conventions over the entire world. Names normally have the form AREA/LOCATION, where AREA is a continent or ocean, and LOCATION is a specific location within the area. North and South America share the same area, 'America'. Typical names are 'Africa/Cairo', 'America/New_York', and 'Pacific/Honolulu'. Some names are further qualified to help avoid confusion; for example, 'America/Indiana/Petersburg' distinguishes Petersburg, Indiana from other Petersburgs in America. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.06.2019, 11:09 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1560685]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
126ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 8ms |
total: | 231ms |
0 / 0 |