powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отобразить локальное время
10 сообщений из 35, страница 2 из 2
Отобразить локальное время
    #40124931
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
fraks> Запрос возвращает одно значение, а видим мы другое? Это нормально?

Конечно. Запрос возвращает дату в своём формате,
пользователь видит в своём. Ты только против дат
таким образом возражаешь или в принципе?
В "булевых" полях же ты как-то дорисовываешь?


В FB2.5 булевых полей нет.
Вместо них использую smallint, иногда char.

Нет. Не дорисовываю.
Булево поле, если оно мне нужно на клиенте так как оно нужно в базе - я тащу на клиента как есть.
Если мне нужно его как-то "не так" отобразить - то в запросе его же привожу к нужному виду, через iif или case, и тащу вторым полем, чисто "для посмотреть".
Исходное поле при этом может быть и скрытым. Оно будет доступно для всяких обработок на клиенте, а смотреть клиент будет на его визуальную копию. Но открыв скрытое поле с "исходником" можно получить доступ к тому что на самом деле в поле лежит.

Т.к. я не храню заголовки полей в базе а прописываю их на клиенте по месту выполнения запроса, то проблемы как у автора топика у меня нет.

Собственно, проблема автора в том, что он заточился на неоднозначное решение с хранением описания полей в базе и вытаскиванием оттуда их на клиента.
Но там у этой палки концов существенно больше чем два, и один конец полезен, а остальные - создают проблемы. Вот автор и мечется. И отказаться от своей системы заголовков не хочется, и возиться с ней уже надоело.

Гаджимурадов Рустам

> А давайте поставим условие по дате.
> Ой... а чего-то оно неправильно срабатывает...

Отчего же. И фильтрация, и сортировка и всё
остальное могут и должны работать корректно.

Работает корректно, только видим мы несколько не то что хотим.
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40124932
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Исходная задача: в таблице есть поле DATE_CREATED, в котором хранится время в UTC.
> Необходимо отобразить в DBGrid локальное время для текущего клиента.

Я бы еще обратил внимание на то, что сама задача - далеко не так однозначна как кажется на первый взгляд.

К примеру, я живу в городе, в котором за время моей жизни смещение от UTC менялось 3 раза.
Соответственно, смещение от UTC - это может быть далеко не константа.
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40124969
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Соответственно, смещение от UTC - это может быть далеко не константа.
А кто сказал, что это должна быть константа? Не нужно выдумывать проблемы на ровном месте.
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40124987
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksЕсли мне нужно его как-то "не так" отобразить - то в запросе его же привожу к нужному виду, через iif или case, и тащу вторым полем, чисто "для посмотреть".
Ну вот некоторые обходятся одним полем вместо двух.


> открыв скрытое поле с "исходником" можно получить
> доступ к тому что на самом деле в поле лежит.

Так и с OnGetText-ом можно.
Что именно тебя смущает?
Сам факт наличия обработчика?

> Собственно, проблема автора в том, что он заточился на
> неоднозначное решение с хранением описания полей в
> базе и вытаскиванием оттуда их на клиента.

Это не проблема, а архитектурное решение
(на мой взгляд тоже сомнительне, но это
тема другого разговора и не в этом топике).
Иметь доступ к исходному RDB$FIELD
может захотеться и по другим причинам.


> Работает корректно, только видим
> мы несколько не то что хотим.

Отчего же? Это зависит от того, как и
что отображать. Сделаешь неправильно -
будет неправильно, разумеется.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40125000
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
fraks
Соответственно, смещение от UTC - это может быть далеко не константа.
А кто сказал, что это должна быть константа? Не нужно выдумывать проблемы на ровном месте.

Ты видимо не понял "глубину глубин".
Тут ни константой ни переменной не обойтись.

Дело не в том что в твоей географии присутствуют клиенты из разных часовых поясов, а в том что для конкретного географического пункта смещение от UTC в разные периоды времени может быть разным. Так же могут меняться границы часовых поясов. Сегодня город/область в одном поясе, а завтра - в другом.

Википедия: tz database
Хабр: Tzdata — глобальная база знаний о часовых поясах

На практике, это так же не панацея.

Лично столкнулся с тем что:
- пакет в линуксе, который работает с Tzdata, перестал обновляться, т.к. изменился формат самой Tzdata.
- обновить пакет что бы он работал с новым форматом не получилось - слишком старый был линукс
- после того как удалось победить 2 первых пункта, оказалось, что информация по моему городу в нем неактуальна
И оставалась неактуальна длительное время, и кажись так актуальной и не стала (стала, но к тому времени я уже перестал на это надеяться).
А город не какой-то мелкий, а третий в России по населению .

Т.к. в России отменили переход на летнее/зимнее время, это позволило выбрать тупо фиксированное смещение. Но это, естественно, не позволяет таким образом корректно вычислить смещение задним числом (т.к. информация в базе неверна), и никто не гарантирует что опять кто-то не выдумает игры с часовым поясом.

Поэтому, если информация о корректности в локальном времяисчислении критична, я бы подумал над собственной версией Tzdata для своей географии. Что бы в случае чего - не ждать манны от бесплатных общественных сервисов.

Вот такая красота для НСО. Да и не только.
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
# From Paul Eggert (2016-03-18):
# Asia/Novosibirsk covers:
# 54	RU-NVS	Novosibirsk Oblast

# From Stepan Golosunov (2016-05-30):
# http://asozd2.duma.gov.ru/main.nsf/(Spravka)?OpenAgent&RN=1085784-6
# moves Novosibirsk oblast from UTC+6 to UTC+7.
# From Stepan Golosunov (2016-07-04):
# The law was signed yesterday and published today on
# http://publication.pravo.gov.ru/Document/View/0001201607040064

Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14  6:00
 6:00 -      +06      1930 Jun 21
 7:00 Russia +07/+08  1991 Mar 31  2:00s
 6:00 Russia +06/+07  1992 Jan 19  2:00s
 7:00 Russia +07/+08  1993 May 23 # say Shanks & P.
 6:00 Russia +06/+07  2011 Mar 27  2:00s
 7:00 -      +07      2014 Oct 26  2:00s
 6:00 -      +06      2016 Jul 24  2:00s
 7:00 -      +07
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40125027
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
Zone Asia/Novosibirsk	 5:31:40 -	LMT	1919 Dec 14  6:00
 6:00 -      +06      1930 Jun 21
 7:00 Russia +07/+08  1991 Mar 31  2:00s
 6:00 Russia +06/+07  1992 Jan 19  2:00s
 7:00 Russia +07/+08  1993 May 23 # say Shanks & P.
 6:00 Russia +06/+07  2011 Mar 27  2:00s
 7:00 -      +07      2014 Oct 26  2:00s
 6:00 -      +06      2016 Jul 24  2:00s
 7:00 -      +07


Ух-ты, даже не 3 раза менялось, а 7 раз!
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40125064
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
Ты видимо не понял "глубину глубин".
Тут ни константой ни переменной не обойтись.
Тынц
fraks
Сегодня город/область в одном поясе, а завтра - в другом.
Да хоть в третьем. Это проблема пользователя, который выставляет часовой пояс в системе на основании своих фантазий. А моя задача этот часовой пояс (а вернее текущее смещение по UTC) считать. Все.
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40125066
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_А моя задача этот часовой пояс (а вернее текущее смещение по UTC) считать. Все.

Не всё. Потому что у тебя не время в поле, а timestamp. Тебе не текущее смещение
надо получать, а то каким оно было в тот момент.
https://docs.microsoft.com/en-us/windows/win32/api/timezoneapi/nf-timezoneapi-systemtimetotzspecificlocaltime
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40125128
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Потому что у тебя не время в поле, а timestamp. Тебе не текущее смещение
надо получать, а то каким оно было в тот момент.
Не нужно. Я же с самого начала написал, что в поле у меня лежит UTC
Чем это лучше ручного вычисления смещения на основании GetTimeZoneInformation и прибавления этого смещения к значению в базе?
...
Рейтинг: 0 / 0
Отобразить локальное время
    #40125133
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Чем это лучше ручного вычисления смещения на основании GetTimeZoneInformation и
прибавления этого смещения к значению в базе?

В базе лежит полночь первого января. Ручное вычисление на основании текущей
таймзоны сейчас даст 03:00, а через полгода у той же записи будет 02:00. Это
действительно то, что тебе нужно?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Отобразить локальное время
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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