Сдвиг метки времени в C / C из БД PostgreSQL и Linux?

0

Я использую C++ и libpq (библиотеку PostgreSQL C) с gcc и PostgreSQL 8.2.19 в Linux. Я использую столбец типа "метка времени с часовым поясом". libpq возвращает результаты запроса как C-строки. Иногда (НЕ всегда) я обнаружил, что строка вернулась сдвинутой на один час вперед (но с тем же часовым поясом, что и другие: +02, который является CEST). Я проверил проблему непосредственно в строке, возвращаемой запросом (обычный SELECT с именем столбца, содержащим тип временной метки с часовым поясом), а не подстрочными преобразованиями, и большинство выполнения выполняется точно. Является ли это своего рода (известной) ошибкой Linux и/или PostgreSQL?

EDIT: Однажды ошибка произошла в следующих преобразованиях, поэтому я пробовал этот код на своей платформе (очевидно, включая библиотеки). Http://codepad.org/HiBbjX0V Собственно, даже это не согласовано, но ошибка противоположна: большинство времени сдвинутый вперед на один час и только во втором выходе час все равно 11:33:52, как в коде. Я пробовал Ubuntu с ручной настройкой часов и часами из Интернета. В обоих случаях есть ошибка. Я думаю, что ошибка на системном уровне, но я не то, что есть.

EDIT: Я не уверен, что ошибка также связана с PostgreSQL, потому что строка с меткой времени обновляется дважды в быстрой последовательности, и, возможно, erorr происходит из-за первого обновления с часом, преобразованным в тип Linux, как я показал в коде.

Теги:
timestamp

1 ответ

1

Я сделал глупую ошибку из-за моего скудного опыта. Как вы видите в коде кодекса, я выделял struct tm * data с malloc, инициализируя localtime (& now), где теперь время time_t now = time (NULL) обрабатывается правильно. Я думаю, что без этого переменная типа struct tm * "не знает" часовой пояс.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню