|
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 |
|
|
start [/forum/topic.php?fid=40&fpage=23&tid=1560685]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 148ms |
0 / 0 |