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

3
我有一个日期字符串21-Apr-2018,如何在Python中将此日期字符串转换为OLE自动化日期?我正在使用Python v3.6。
OLE日期的定义可以在此处找到。

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

OLE自动化日期是实现为浮点数的一种日期格式,其中整数部分表示该日期与1899年12月30日午夜之间的天数,小数部分表示当天时间占24小时的比例。例如,1899年12月31日午夜表示为1.0;1900年1月1日上午6点表示为2.25;1899年12月29日午夜表示为-1.0;1899年12月29日上午6点表示为-1.25。
基本的OLE自动化日期是1899年12月30日午夜。最小的OLE自动化日期是公元0100年1月1日午夜。最大的OLE自动化日期与DateTime.MaxValue相同,即公元9999年12月31日的最后时刻。
1个回答

4

至少有两种方法。一种是手动从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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接