1
我正在使用Python腳本和xlrd
模塊從我保存在我的計算機上的Excel文件中讀取日期。現在,我已經知道Excel將日期保存爲一個序列日期,它計算自1900年1月0日以來的天數。我一直在使用datetime
函數將此數字轉換爲YYYY-MM-DD形式的日期對象。例如:在Python中使用xlrd從Excel中讀取日期時,datetime隨機變爲float
v_created = sh.cell(r,created_col).value
if not v_created:
v_created = 0
elif not isinstance(v_created, basestring):
v_created = datetime.date(1900, 1, 1) + datetime.timedelta(int(v_created)-2)
print 'Create '
print v_created
這將打印輸出如下:
Create
2013-09-26
在另一方面,代碼應該做同樣的事情下一個塊,但把一個浮動到變量,而不是日期:
v_updated = sh.cell(r,updated_col).value
if not v_updated:
v_updated = 0
elif not isinstance(v_updated, basestring):
v_upated = datetime.date(1900, 1, 1) + datetime.timedelta(int(v_updated)-2)
print 'Updated '
print v_updated
據我所知,這個代碼塊是等同於第一,但吐出以下輸出:
Updated
41543.5895833
我將這些值發送到Oracle數據庫。當我運行查詢,我得到以下錯誤:
Traceback (most recent call last):
cursor.execute(query, values)
cx_Oracle.DatabaseError: ORA-00932: inconsistent datatypes: expected DATE got NUMBER
爲什麼一個代碼塊輸出日期對象,而代碼的第二天塊輸出浮動?據我所知,Excel使用相同的格式選項以完全相同的方式存儲日期。
哦,我的天......我多麼愚蠢!當然,在Python中它只會在現場聲明新的變量,所以它從不會拋出異常。 我總是假設我有最糟糕的錯誤時,它通常只是這樣的簡單的錯誤。 –