在Python中使用xlrd从Excel读取日期时,datetime随机变为浮点数

时间:2013-09-26 19:13:49

标签: python excel datetime xlrd

我正在使用带有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 

另一方面,下一个代码块应该完全相同,但是将float放入变量而不是日期:

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使用相同的格式选项以完全相同的方式存储日期。

1 个答案:

答案 0 :(得分:2)

你有一个错字。

你写道:

v_upated = datetime.date(1900, 1, 1) + datetime.timedelta(int(v_updated)-2)

然后打印v_updated

当我运行它时,它工作41543实际上是自1900年以来的天数...就像你计算的那样。