|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
Таблица с одним полем: Код: sql 1. 2. 3. 4. 5.
Добавляю запись в 14:02:41 по Мск Код: sql 1.
отображаемое значение через PgAdmin 2022-01-25 14:02:41.157086 Получаю UTS в мс: Код: sql 1. 2. 3. 4.
получаю число: 1643119361157 что в GMT = GMT: Tuesday, 25 January 2022 г., 14:02:41.157 по Мск = вторник, 25 января 2022 г., 17:02:41.157 GMT+03:00 Почему вставка идет в локальном времени? Как сделать, чтобы время было всегда и везде GMT? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 14:14 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
вот такой запрос на вставку + выборку выдает 2 разных результата: Код: sql 1. 2. 3. 4. 5. 6. 7.
Результат: 1643113550846 1643124350846 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 15:26 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
про герр Код: sql 1. 2. 3. 4. 5.
... Почему вставка идет в локальном времени? Как сделать, чтобы время было всегда и везде GMT? Поменяйте тип столбца на timestamp with time zone и время всегда будет хранится в UTC, как и написано в документации: https://postgrespro.ru/docs/postgresql/14/datatype-datetime Значения timestamp with time zone внутри всегда хранятся в UTC (Universal Coordinated Time, Всемирное скоординированное время или время по Гринвичу, GMT). Вводимое значение, в котором явно указан часовой пояс, переводится в UTC с учётом смещения данного часового пояса. Если во входной строке не указан часовой пояс, подразумевается часовой пояс, заданный системным параметром TimeZone и время так же пересчитывается в UTC со смещением timezone. Когда значение timestamp with time zone выводится, оно всегда преобразуется из UTC в текущий часовой пояс timezone и отображается как локальное время. Чтобы получить время для другого часового пояса, нужно либо изменить timezone, либо воспользоваться конструкцией AT TIME ZONE (см. Подраздел 9.9.4). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 15:52 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
Павел Лузанов, Код: sql 1. 2. 3. 4. 5.
Ничего не изменилось: Вывод кода из 2-го моего поста: автор1643115253703 1643126053703 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 15:56 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
про герр вот такой запрос на вставку + выборку выдает 2 разных результата: Код: sql 1. 2. 3. 4. 5. 6. 7.
Результат: 1643113550846 1643124350846 Что вполне логично: первое значение из now(), второе — из таблицы, вставленное ранее. Заверните вставку и запрос в общую транзакцию, разница должна исчезнуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 16:12 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
Ы2, разница между этими значениями 10800000 мс, что есть 3 часа. Запрос выполнился за 11мс. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 16:23 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
про герр, now() всегда с часовым поясом, поэтому, когда вы его приводите к timestamp, вы получаете GMT микросекунд ± часовой пояс. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.01.2022, 17:06 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
Другая сторона вопроса: Работаю в PG через Qt, если получаю timestamp как дата-время, то все корректно. Если получаю как строку тогда есть сдвиг на временную зону. Каким образом привести к одному знаменателю текстовое значение и значение даты-времени? Т.е. поле типа timestamp without time zone в тексте значение 2022-01-26 10:00:00.001, в дата-время 1643180400001 мс, что соответствует GMT: Wednesday, 26 January 2022 г., 7:00:00.001 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:32 |
|
Timestamp WO timezone
|
|||
---|---|---|---|
#18+
про герр вот такой запрос на вставку + выборку выдает 2 разных результата: Код: sql 1. 2. 3. 4. 5. 6. 7.
Результат: 1643113550846 1643124350846 На самом деле всё достаточно просто... timestamp WITHOUT timezone считается не TIMESTAMP от UTC а timestamp в текущей timezone; и смотря какую вы timezone поставите - epoch будет разный потому что ОДНО И ТОЖЕ значение timestamp without timezone значит разные моменты времени смотря от настройки timezone которая на лету меняться может. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Поэтому если вы хотите чтобы timestamp without timezone как UTC трактовался то надо об этом говорить явно: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
ну или альтернатива как писали выше приводить к timestamp with timezone Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
-- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 23:46 |
|
|
start [/forum/topic.php?fid=53&fpage=3&tid=1993687]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 150ms |
0 / 0 |