powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Поддержка часовых поясов
19 сообщений из 19, страница 1 из 1
Поддержка часовых поясов
    #39742543
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр, как появится время посмотри пожалуйста поддержку типов с часовыми поясами

https://github.com/FirebirdSQL/firebird/blob/master/doc/sql.extensions/README.time_zone.md

помимо того что нет нативной поддержки типов при работе с RDB$TIME_ZONE_UTIL.TRANSITIONS постоянно сыплет ошибки при подсказках параметров
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39742634
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А оно уже работает в ФБ 4? Я недавно пробовал - не работало.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39742682
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

сейчас работает. С часовыми поясами по смещению +/-часы:минуты работает сразу из коробки.

Для того чтобы установить базу региональных поясов надо немного повозиться (запихнуть данные из базы данных часовых поясов в формате .res файлов в .dat файл). Если не получится могу подсказать как. Думаю когда обновят icu будет чуть проще. Но на уровне API и SQL вроде уже всё окончательно
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39744641
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисRDB$TIME_ZONE_UTIL.TRANSITIONS

Кстати, чего делать-то с такими пакетами? Заголовок и тело у него пустые, смысла показывать его в эксплорере БД как бы нет...
Заводить отдельную ветку с системными пакетами тоже не очень хочется.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39744643
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно пощупать свежую версию. Нативной поддержки пока нет, разумеется.
SET TIME ZONE BIND LEGACY выполняется автоматом при коннекте.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39744741
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertRDB$TIME_ZONE_UTIL.TRANSITIONS
Кстати, чего делать-то с такими пакетами?

понятия не имею. По сути это почти тоже самое что встроенные функции. В принципе можно отображать псевдо заголовок пакета, где процедуры и функции отображены, а тело не показывать (можно вкладку скрыть). Ну и перекомпиляцию отключить.

IBExpertМожно пощупать свежую версию. Нативной поддержки пока нет, разумеется.
SET TIME ZONE BIND LEGACY выполняется автоматом при коннекте.

спасибо. Пока будем смотреть типы с тайм зонами как DATE_FIELD || ''
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39745073
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисПока будем смотреть типы с тайм зонами как DATE_FIELD || ''

Посмотри свежую версию, там это уже не нужно.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39745118
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

спасибо, вечером гляну.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39745151
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

глянул. На базовом уровне вроде поддерживается хорошо. Редактор ХП, ленивый режим, создание таблиц, запросы.

В отладчике хранимок параметры с новым типом не распознаются
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39745297
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисВ отладчике хранимок параметры с новым типом не распознаются

Отображение в сетке и выгрузка в скрипт пока только сделаны.
Отладчик вообще отдельная песня. Там все на вариантах, и с какого бока туда таймзону пристегивать - пока не очень понятно.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39745379
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertТам все на вариантах, и с какого бока туда таймзону пристегивать - пока не очень понятно.

ясно.

Если ничего не придумаешь, попробуй просто к строке кастить, перед записью в вариант.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39746418
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
SELECT CAST('00:00:00 +3' AS TIME WITH TIME ZONE) FROM RDB$DATABASE



неожиданно возвращает 21:00:00 +3
Это меня глючит или сервер?
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39746443
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

в моей версии эксперт вообще фигню показывает как будто это не TIME, а TIMESTAMP

30.12.1899 21:00 +03:00

если запрос написать с преобразованием к строке то возвращает правильно

Код: sql
1.
SELECT CAST('00:00:00 +3' AS TIME WITH TIME ZONE) || '' FROM RDB$DATABASE



Смотрим как в isql

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
d:\fb\fb40>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'inet4://localhost:3054/test' user sysdba password 'masterkey';
Database: 'inet4://localhost:3054/test', User: SYSDBA
SQL> SELECT CAST('00:00:00 +3' AS TIME WITH TIME ZONE) FROM RDB$DATABASE;

                                          CAST
==============================================
00:00:00.0000 +03:00

SQL>

Похоже всё таки глючит IBExpert
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39746565
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисв моей версии эксперт вообще фигню показывает как будто это не TIME, а TIMESTAMP


Да это ерунда, там просто значение форматировалось как дата+время. Это я уже исправил.
У меня и с таймштампом такая же фигня
Код: plsql
1.
SELECT CAST('12.12.2018 00:00:00 +3:12' AS TIMESTAMP WITH TIME ZONE) FROM RDB$DATABASE



И кто-то аккуратно отнимает 3:12 от полночи :)
Я точно этого не делаю. Если в строку кастить, то да - все правильно.
А версия сервера у тебя какая?

Ну и вишенки на торт:
Код: plsql
1.
SELECT cast(TIMESTAMP '12.12.2018 00:00:00 +3:00' as TIMESTAMP without time zone) || '' FROM RDB$DATABASE



Возвращает 2018-12-12 04:00:00.0000

Код: plsql
1.
SELECT cast(TIMESTAMP '12.12.2018 00:00:00 +3:12' as TIMESTAMP without time zone) || '' FROM RDB$DATABASE



Возвращает 2018-12-12 03:48:00.0000

Это вот как так?
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39746843
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя часовой пояс другой.

Код: sql
1.
2.
3.
select extract(TIMEZONE_HOUR from current_timestamp) as "TIMEZONE_HOUR",
       extract(TIMEZONE_MINUTE from current_timestamp) as "TIMEZONE_MINUTE"
from rdb$database;



Код: plaintext
1.
TIMEZONE_HOUR  TIMEZONE_MINUTE
3              0

Часовой пояс сеанса это либо часовой пояс указанный в isc_dpb_session_time_zone клиента, либо через SET TIME ZONE, если ничего нет то часовой пояс сервера.

TIME WITH TIME ZONE всегда возвращается как есть
При касте к TIMESTAMP WITHOUT TIME ZONE сначала идёт преобразование к часовому поясу сеанса, а потом из него просто удаляется информация о часовом поясе.

Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
d:\fb\fb40>isql
Use CONNECT or CREATE DATABASE to specify a database
SQL> connect 'inet4://localhost:3054/test' user sysdba password 'masterkey';
Database: 'inet4://localhost:3054/test', User: SYSDBA
SQL> show version;
ISQL Version: WI-T4.0.0.1324 Firebird 4.0 Alpha 1
Server version:
Firebird/Windows/AMD/Intel/x64 (access method), version "WI-T4.0.0.1324 Firebird 4.0 Alpha 1"
Firebird/Windows/AMD/Intel/x64 (remote server), version "WI-T4.0.0.1324 Firebird 4.0 Alpha 1/tcp (station9)/P16:C"
Firebird/Windows/AMD/Intel/x64 (remote interface), version "WI-T4.0.0.1324 Firebird 4.0 Alpha 1/tcp (station9)/P16:C"
on disk structure version 13.0
SQL> SELECT CAST('12.12.2018 00:00:00 +3:12' AS TIMESTAMP WITH TIME ZONE) FROM RDB$DATABASE;

                                                     CAST
=========================================================
2018-12-12 00:00:00.0000 +03:12

SQL> SELECT cast(TIMESTAMP '12.12.2018 00:00:00 +3:00' as TIMESTAMP without time zone) || '' FROM RDB$DATABASE;

CONCATENATION
=========================
2018-12-12 00:00:00.0000

SQL> SELECT CAST(TIMESTAMP '12.12.2018 00:00:00 +4:00' AS TIMESTAMP WITHOUT TIME ZONE) || '' FROM RDB$DATABASE;

CONCATENATION
=========================
2018-12-11 23:00:00.0000

SQL> SELECT cast(TIMESTAMP '12.12.2018 00:00:00 +3:12' as TIMESTAMP without time zone) || '' FROM RDB$DATABASE;

CONCATENATION
=========================
2018-12-11 23:48:00.0000

SQL> SELECT cast(TIMESTAMP '12.12.2018 00:00:00 +3:12' as TIMESTAMP without time zone) FROM RDB$DATABASE;

                     CAST
=========================
2018-12-11 23:48:00.0000

SQL> SELECT cast(TIMESTAMP '12.12.2018 00:00:00 +3:00' as TIMESTAMP without time zone) FROM RDB$DATABASE;

                     CAST
=========================
2018-12-12 00:00:00.0000
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39747050
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисTIME WITH TIME ZONE всегда возвращается как есть
При касте к TIMESTAMP WITHOUT TIME ZONE сначала идёт преобразование к часовому поясу сеанса, а потом из него просто удаляется информация о часовом поясе.


Ну, ОК. С "вишенками" вроде понятней стало, спасибо.
Но исходный вопрос остался. Почему в ISQL не воспроизводится - не знаю. Может, дело в API? Он, кажется, новый использует?

Вот такой запрос:
Код: plsql
1.
2.
SELECT CAST('00:00:00 Europe/Moscow' AS TIME WITH TIME ZONE),
       CAST('00:00:00 +3' AS TIME WITH TIME ZONE) FROM RDB$DATABASE


вроде как должен возвращать одинаковое utc-время в обоих полях. Ан нет, для второго 21:00 возвращает.
Под отладчиком тоже хорошо видно, что там совсем не 0 от сервера прилетает, как для первого поля.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39755158
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

попробуй на последнем снапшоте. Там много чего подкрутили + добавили возможность указать в конфиге сервера часовой пояс по умолчанию.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39755440
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Дениспопробуй на последнем снапшоте. Там много чего подкрутили

Без изменений.
Я еще вот так попробовал для исключения своих косяков:
Код: plsql
1.
2.
3.
4.
5.
6.
CREATE TABLE A (
  FLD1 TIME WITH TIME ZONE);

INSERT INTO A (FLD1) VALUES (CAST('00:00:00 Europe/Moscow' AS TIME WITH TIME ZONE));
INSERT INTO A (FLD1) VALUES (CAST('00:00:00 +3' AS TIME WITH TIME ZONE));
COMMIT;



Ну и вижу в файле БД на странице данных, что в первой записи лежит время $00000000, а во второй - $2D0FA500, т.е. 21:00.
Так что вот... Кто там по этим тайм-зонам главный? Видимо, его пытать надо.
...
Рейтинг: 0 / 0
Поддержка часовых поясов
    #39755463
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

Адриано
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Поддержка часовых поясов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]