从cx_oracle游标中检索时区感知日期时间对象的正确方法是什么?

时间:2011-05-25 14:03:44

标签: python oracle internationalization cx-oracle

cx_oracle为datetimeTIMESTAMP类型的列返回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。我希望以下内容将返回包含tzinfo数据的Python日期时间对象。但是:

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

该datetime对象不支持时区,因此我无法在我的应用程序中可靠地使用此日期。

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

1 个答案:

答案 0 :(得分:3)

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

因此,如果您没有意识到datetime对象时区,我理解它是UTC。所以你可以这样做:

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

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