2

cx_oracle 返回or类型datetime的列的实例,但这些 datetime 实例不知道时区。TIMESTAMPTIMESTAMP 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。我希望以下内容会返回一个包含 tzinfo 数据的 Python 日期时间对象。然而:

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

那个 datetime 对象不知道时区,所以我不能在我的应用程序中可靠地使用这个日期。

将此列作为时区感知的日期时间对象检索的最佳方法是什么?

4

1 回答 1

3

在这里,我看到以下内容:对于 TIMESTAMP WITH TIME ZONE 数据,日期时间值始终采用 UTC,因此无需转换。

因此,如果您datetime不知道对象时区,我知道它是 UTC。所以你可以这样做:

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

或尝试该功能SYS_EXTRACT_UTC从具有时区偏移的日期时间中提取 UTC),然后使用pytz.utc.localize.

于 2011-05-25T14:14:53.423 回答