|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам fraks> Запрос возвращает одно значение, а видим мы другое? Это нормально? Конечно. Запрос возвращает дату в своём формате, пользователь видит в своём. Ты только против дат таким образом возражаешь или в принципе? В "булевых" полях же ты как-то дорисовываешь? В FB2.5 булевых полей нет. Вместо них использую smallint, иногда char. Нет. Не дорисовываю. Булево поле, если оно мне нужно на клиенте так как оно нужно в базе - я тащу на клиента как есть. Если мне нужно его как-то "не так" отобразить - то в запросе его же привожу к нужному виду, через iif или case, и тащу вторым полем, чисто "для посмотреть". Исходное поле при этом может быть и скрытым. Оно будет доступно для всяких обработок на клиенте, а смотреть клиент будет на его визуальную копию. Но открыв скрытое поле с "исходником" можно получить доступ к тому что на самом деле в поле лежит. Т.к. я не храню заголовки полей в базе а прописываю их на клиенте по месту выполнения запроса, то проблемы как у автора топика у меня нет. Собственно, проблема автора в том, что он заточился на неоднозначное решение с хранением описания полей в базе и вытаскиванием оттуда их на клиента. Но там у этой палки концов существенно больше чем два, и один конец полезен, а остальные - создают проблемы. Вот автор и мечется. И отказаться от своей системы заголовков не хочется, и возиться с ней уже надоело. Гаджимурадов Рустам > А давайте поставим условие по дате. > Ой... а чего-то оно неправильно срабатывает... Отчего же. И фильтрация, и сортировка и всё остальное могут и должны работать корректно. Работает корректно, только видим мы несколько не то что хотим. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 08:26 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
> Исходная задача: в таблице есть поле DATE_CREATED, в котором хранится время в UTC. > Необходимо отобразить в DBGrid локальное время для текущего клиента. Я бы еще обратил внимание на то, что сама задача - далеко не так однозначна как кажется на первый взгляд. К примеру, я живу в городе, в котором за время моей жизни смещение от UTC менялось 3 раза. Соответственно, смещение от UTC - это может быть далеко не константа. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 08:32 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
fraks Соответственно, смещение от UTC - это может быть далеко не константа. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 14:42 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
fraksЕсли мне нужно его как-то "не так" отобразить - то в запросе его же привожу к нужному виду, через iif или case, и тащу вторым полем, чисто "для посмотреть". Ну вот некоторые обходятся одним полем вместо двух. > открыв скрытое поле с "исходником" можно получить > доступ к тому что на самом деле в поле лежит. Так и с OnGetText-ом можно. Что именно тебя смущает? Сам факт наличия обработчика? > Собственно, проблема автора в том, что он заточился на > неоднозначное решение с хранением описания полей в > базе и вытаскиванием оттуда их на клиента. Это не проблема, а архитектурное решение (на мой взгляд тоже сомнительне, но это тема другого разговора и не в этом топике). Иметь доступ к исходному RDB$FIELD может захотеться и по другим причинам. > Работает корректно, только видим > мы несколько не то что хотим. Отчего же? Это зависит от того, как и что отображать. Сделаешь неправильно - будет неправильно, разумеется. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 16:28 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
_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.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 18:44 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
fraks Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
Ух-ты, даже не 3 раза менялось, а 7 раз! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.01.2022, 20:32 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
fraks Ты видимо не понял "глубину глубин". Тут ни константой ни переменной не обойтись. fraks Сегодня город/область в одном поясе, а завтра - в другом. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2022, 01:34 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
_Vasilisk_А моя задача этот часовой пояс (а вернее текущее смещение по UTC) считать. Все. Не всё. Потому что у тебя не время в поле, а timestamp. Тебе не текущее смещение надо получать, а то каким оно было в тот момент. https://docs.microsoft.com/en-us/windows/win32/api/timezoneapi/nf-timezoneapi-systemtimetotzspecificlocaltime Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2022, 02:14 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Потому что у тебя не время в поле, а timestamp. Тебе не текущее смещение надо получать, а то каким оно было в тот момент. Чем это лучше ручного вычисления смещения на основании GetTimeZoneInformation и прибавления этого смещения к значению в базе? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2022, 17:02 |
|
Отобразить локальное время
|
|||
---|---|---|---|
#18+
_Vasilisk_Чем это лучше ручного вычисления смещения на основании GetTimeZoneInformation и прибавления этого смещения к значению в базе? В базе лежит полночь первого января. Ручное вычисление на основании текущей таймзоны сейчас даст 03:00, а через полгода у той же записи будет 02:00. Это действительно то, что тебе нужно?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.01.2022, 17:57 |
|
|
start [/forum/topic.php?fid=40&msg=40125066&tid=1559847]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 251ms |
total: | 412ms |
0 / 0 |