Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Поддержка часовых поясов / 19 сообщений из 19, страница 1 из 1
04.12.2018, 18:13
    #39742543
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка часовых поясов
Александр, как появится время посмотри пожалуйста поддержку типов с часовыми поясами

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

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

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

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

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

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

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

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

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

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

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

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

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

ясно.

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



неожиданно возвращает 21:00:00 +3
Это меня глючит или сервер?
...
Рейтинг: 0 / 0
12.12.2018, 09:41
    #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
12.12.2018, 12:06
    #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
12.12.2018, 17:34
    #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
13.12.2018, 05:14
    #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
30.12.2018, 16:20
    #39755158
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка часовых поясов
IBExpert,

попробуй на последнем снапшоте. Там много чего подкрутили + добавили возможность указать в конфиге сервера часовой пояс по умолчанию.
...
Рейтинг: 0 / 0
02.01.2019, 04:50
    #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
02.01.2019, 11:39
    #39755463
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поддержка часовых поясов
IBExpert,

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


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