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

时间:2018-04-21 14:22:21

标签: python python-3.x date datetime 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日。

1 个答案:

答案 0 :(得分:3)

至少有几种方法。您可以从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