Как правильно получить объекты datetime с указанием часового пояса из курсора cx_oracle? - PullRequest
2 голосов
/ 25 мая 2011

cx_oracle возвращает datetime экземпляров для столбцов типов TIMESTAMP или TIMESTAMP WITH TIME ZONE, но эти экземпляры даты и времени не учитывают часовой пояс.

Например:

SELECT column_name, data_type FROM ALL_TAB_COLUMNS WHERE table_name = 'mytable';

column_name data_type
----------- ---------------------------
MYCOL       TIMESTAMP(6) WITH TIME ZONE

Как вы можете видеть, MYCOL - это TIMESTAMP, который учитывает часовой пояс. Я ожидаю, что следующее вернет объект даты и времени Python, содержащий данные tzinfo. Тем не менее:

>>> cxoracle_cursor.execute("select mycol from mytable")
>>> row = cx_oracle_cursor.fetchone()
>>> row['mycol']
datetime.datetime(2011, 6, 15, 8, 30)

Этот объект даты и времени не знает часовой пояс, поэтому я не могу надежно использовать эту дату в своем приложении.

Каков наилучший подход к извлечению этого столбца как объекта даты и времени с учетом часового пояса?

1 Ответ

3 голосов
/ 25 мая 2011

Здесь Я вижу следующее: Для данных TIMESTAMP WITH TIME ZONE значение даты-времени всегда указывается в UTC, поэтому преобразование не требуется.

Итак, если вы не знаете часовой пояс объекта datetime, я понимаю, что это в UTC. Так что вы можете сделать:

dt = pytz.utc.localize(row['mycol'])

Или попробуйте функцию SYS_EXTRACT_UTC ( Извлекает UTC из даты и времени со смещением часового пояса ), а затем с помощью pytz.utc.localize.

...