Сейчас 23 апреля 2024 года 1:15 ночи. Мой часовой пояс — GMT +7. У меня есть приложение C# и приложение DbEaver, которые подключаются к одному и тому же серверу PostgreSQL. Я выполняю очень простой запрос следующим образом: select current_date
.
Результат DbEaver: «23 апреля 2024 г.»
Результат C# (как Dapper, так и ADO.NET): «22 апреля 2024 г.».
Я обнаружил проблему, поскольку результаты моего запроса с условием datetime > current_date
неверны.
Пожалуйста, объясните мне причину и способы устранения проблемы. Я очень ценю вашу помощь
ADO возвращает неопределенное значение DateTime
Попробуйте использовать функцию CURRENT_TIMESTAMP()
.
то же самое, но все равно возвращает разные результаты
Где ваш Dapper-запрос? Запрос на DateTimeOffset
.
Ваш результат DBeaver, похоже, находится в часовом поясе «ICT» (индокитайское время), результат ADO.NET — в «UTC». Используйте select (current_timestamp at time zone 'ICT')::date
и результат будет тот же;
Значение параметра timezone
должно быть разным в двух сеансах, чтобы значения типа данных timestamp with time zone
отображались по-разному.
Используйте оператор SQL SET
, чтобы настроить параметр на часовой пояс, соответствующий вашему сеансу:
SET timezone = 'Europe/Vienna';
Я добавил Timezone=Asia/Bangkok
в строку подключения, и все работает.
Если я не ошибаюсь, ADO возвращает дату и время в формате UTC.