我正在使用带有xlrd
模块的 Python 脚本从我保存在计算机上的 Excel 文件中读取日期。现在,我已经知道 Excel 将日期保存为序列日期,它计算自 1900 年 1 月 0 日以来的天数。我一直在使用该datetime
函数将此数字转换为格式为 YYYY-MM-DD 的日期对象。例如:
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 使用相同的格式选项以完全相同的方式存储日期。