【问题标题】:Convert date from string format to OLE automation date将日期从字符串格式转换为 OLE 自动化日期
【发布时间】:2018-04-21 14:22:20
【问题描述】:
我有一个日期字符串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 自动化 Date 与 DateTime.MaxValue 相同,最后时刻
9999 年 12 月 31 日。
【问题讨论】:
标签:
python
python-3.x
date
datetime
ole
【解决方案1】:
至少有几种方法。您可以从 OLE 原始日期手动计算,或使用第 3 方库,例如 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