Python 日期时间和 Excel 之间的日期转换差异

Date Conversion Difference Between Python Datetime and Excel

我正在尝试解析从 Python 中的 excel 文件收到的数据。为此,我正在使用 xlrd 库。我在 Excel 中有一个单元格,其值为 5/16/2016 12:15,我在 Python 中收到它作为 42506.6493。我知道 Excel 将日期保存为自 1/1/1900 以来的天数。所以在 Python 中,我尝试添加这个天数(现在只是天数,没有代表时间的分数)以获得相同的日期,使用下面的代码:

orgDate = datetime.datetime(1900,1,1,0,0,0,0)
xlVal = 42506.6493
newDate = orgDate + datetime.timedelta(days=int(xlVal))

然而,当我读取 newDate 的值时,我发现它是 datetime.datetime(2016, 5, 18, 0, 0) 而应该是 5 月 16 日而不是 18 日。有人知道如何处理这个吗?

请查阅xlrd documentation, particularly the section on dates in Excel

日期并非真正从 1900-01-01 开始。您有两天的差异,因为 (1) Excel 保留了 Lotus 1-2-3 错误,该错误将 1900 年视为闰年,并且 (2) 即使日期确实从 1900-01-01 开始,那么将 1900-01-01 作为第 1 天,而不是第 0 天,因此您需要相应地调整您的 timedelta。

但实际上,使用 xlrd 的内置日期工具可以省去麻烦,xldate_as_tuple or xldate_as_datetime