【问题标题】:Convert date from excel in number format to date format python [duplicate]将日期从数字格式的excel转换为日期格式python [重复]
【发布时间】:2015-09-30 06:54:33
【问题描述】:

我正在从 excel 中读取数据并使用 python 操作数据。但是日期以整数形式出现。如何将日期转换回日期格式?

5/15/2015 即将以 42139.00 形式发布

【问题讨论】:

标签: python excel datetime xlrd


【解决方案1】:

模块xlrd提供函数xldate_as_tuple将Excel的数字日期格式转换为元组(year, month, day, hour, minute, nearest_second)。

然后您可以使用datetime.datetime 将元组转换为datetime 对象。

from datetime import datetime
import xlrd

excel_date = 44032
python_date = datetime(*xlrd.xldate_as_tuple(excel_date, 0))

【讨论】:

  • xlrd.xldate_as_tuple() 的第二个参数是工作簿的“日期模式”(即基于 1900 或 1904 的日期)。最好从您的工作簿直接传递。 (即工作簿的 datemode 属性)。 xlrd.readthedocs.io/en/latest/…
  • xlrd.xldate_as_datetime(excel_date, 0) 同 datetime(*xlrd.xldate_as_tuple(excel_date, 0))
【解决方案2】:
from datetime import datetime
excel_date = 42139
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + excel_date - 2)
tt = dt.timetuple()
print(dt)
print(tt)

正如 J.F. Sebastian 所述,此答案仅适用于 1900/03/01 之后的任何日期

编辑:(回复@R.K)

如果您的 excel_date 是浮点数,请使用以下代码:

from datetime import datetime

def floatHourToTime(fh):
    hours, hourSeconds = divmod(fh, 1)
    minutes, seconds = divmod(hourSeconds * 60, 1)
    return (
        int(hours),
        int(minutes),
        int(seconds * 60),
    )

excel_date = 42139.23213
dt = datetime.fromordinal(datetime(1900, 1, 1).toordinal() + int(excel_date) - 2)
hour, minute, second = floatHourToTime(excel_date % 1)
dt = dt.replace(hour=hour, minute=minute, second=second)

print(dt)
assert str(dt) == "2015-05-15 00:13:55"

【讨论】:

  • 它有效,但日期 42139 是 2015-05-17 00:00:00 而不是 2015-05-15 00:00:00
  • 是的。 -2 解决了。但是很奇怪。
  • @user2728024: -2 并不总是正确的,请参阅this answer
  • 我有一个浮点格式的时间例如。 42139.23213 .... 这也包括时间.. 但是使用 datetime.fromordial() 我得到的输出类似于 dd/mm/yyyy 00:00:00 .... 我的时间总是 0hrs ... 怎么办我得到正确的日期时间? @saeedgnu
  • -2 因为 Excel 日期的“开始日期”实际上是 1899 年的最后一天,而 Excel 假定 1900 年是闰年(事实并非如此)。 xlrd.readthedocs.io/en/latest/…
猜你喜欢
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多