gpt4 book ai didi

python - 在Python中使用xlrd从Excel读取日期时,日期时间随机变成 float

转载 作者:行者123 更新时间:2023-12-01 05:36:04 24 4
gpt4 key购买 nike

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

为什么一个代码块输出日期对象,而下一个代码块输出 float ?据我所知,Excel 使用相同的格式选项以完全相同的方式存储日期。

最佳答案

您有一个拼写错误。

你写:

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

然后打印v_updated

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

关于python - 在Python中使用xlrd从Excel读取日期时,日期时间随机变成 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19036709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com