问题描述
|
cx_oracle为
TIMESTAMP
或TIMESTAMP WITH TIME ZONE
类型的列返回datetime
实例,但是这些datetime实例不支持时区。
例如:
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 datetime对象。然而:
>>> cxoracle_cursor.execute(\"select mycol from mytable\")
>>> row = cx_oracle_cursor.fetchone()
>>> row[\'mycol\']
datetime.datetime(2011,6,15,8,30)
该datetime对象不支持时区,因此我无法在应用程序中可靠地使用该日期。
将此列作为可识别时区的datetime对象检索的最佳方法是什么?
解决方法
在这里,我看到以下内容:对于TIMESTAMP WITH TIME ZONE数据,datetime值始终为UTC,因此无需进行转换。
因此,如果您不知道“ 0”对象时区,则表示它是UTC。因此,您可以执行以下操作:
dt = pytz.utc.localize(row[\'mycol\'])
或尝试使用功能SYS_EXTRACT_UTC
(从具有时区偏移量的日期时间中提取UTC),然后再使用pytz.utc.localize
。