我有一个日期字符串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日。
答案 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