将日期从字符串格式转换为 OLE 自动化日期



我有一个日期字符串21-Apr-2018.如何在 python 中将此日期字符串转换为 OLE 自动化日期?我正在使用Python v3.6。

可在此处找到 OLE 日期的定义。

https://msdn.microsoft.com/en-us/library/system.datetime.tooadate(v=vs.110).aspx

OLE 自动化日期作为浮点数实现,其浮点数 整数分量是午夜之前或之后的天数,30 1899 年 12 月,其分数部分表示 那天除以 24。例如,1899 年 12 月 31 日午夜是 以 1.0 表示;1900年1月1日上午6点以2.25表示; 1899 年 12 月 29 日午夜用 -1.0 表示;和上午 6 点、29 1899 年 12 月由 -1.25 表示。

基准 OLE 自动化日期是 1899 年 12 月 30 日午夜。这 最小 OLE 自动化日期为 0100 年 1 月 1 日午夜。最大 OLE 自动化日期与 DateTime.MaxValue 相同,即最后一刻 9999年12月31日。

至少有几种方法。您可以从 OLE 原产日期手动计算,也可以使用第三方库(如xlrd)。

在每种情况下,您都需要将字符串转换为datetime对象。

from datetime import datetime
from xlrd import xldate
def datetime2ole(date):
date = datetime.strptime(date, '%d-%b-%Y')
OLE_TIME_ZERO = datetime(1899, 12, 30)
delta = date - OLE_TIME_ZERO
return float(delta.days) + (float(delta.seconds) / 86400)  # 86,400 seconds in day
def datetime2xl(date):
date = datetime.strptime(date, '%d-%b-%Y')
parts = ('year', 'month', 'day', 'hour', 'minute', 'second')
components = tuple(getattr(date, x) for x in parts)
return xldate.xldate_from_datetime_tuple(components, 0)
print(datetime2ole('22-Apr-2018'))  # 43212.0
print(datetime2xl('22-Apr-2018'))   # 43212.0

最新更新