如何在Python 3.6中将日期字符串21-Apr-2018转为OLE自动化日期
如何在Python 3.6中将"21-Apr-2018"转换为OLE Automation日期?
先给你明确下OLE Automation日期的核心规则:它是一个浮点数,整数部分代表距离1899年12月30日的天数,小数部分则是当日时间占24小时的比例(比如中午12点对应的小数就是0.5,因为12/24=0.5)。
接下来用Python标准库就能搞定转换,分两步走:
1. 把日期字符串解析成Python的datetime对象
针对"21-Apr-2018"这种日-英文月缩写-年的格式,我们用datetime.strptime()方法,对应的格式符是%d-%b-%Y:
from datetime import datetime # 你的目标日期字符串 date_str = "21-Apr-2018" # 解析为datetime对象 target_dt = datetime.strptime(date_str, "%d-%b-%Y")
小提示:如果你的系统默认语言不是英文,可能会解析失败,这时候可以手动指定英文locale:
import locale locale.setlocale(locale.LC_TIME, 'en_US.UTF-8')
2. 计算与OLE基准日期的时间差,转换为浮点数
OLE日期的基准点是1899年12月30日,我们计算目标日期和这个基准点的时间差,再把天数和时间部分转换成对应的浮点数即可:
# 定义OLE日期的基准日期 ole_base_dt = datetime(1899, 12, 30) # 计算时间差 time_delta = target_dt - ole_base_dt # 转换为OLE日期:天数 + 秒数占一天的比例 + 微秒数占一天的比例 ole_date = time_delta.days + time_delta.seconds / (24 * 3600) + time_delta.microseconds / (24 * 3600 * 10**6) print(ole_date) # 输出结果:43181.0
如果你的日期字符串包含时间(比如"21-Apr-2018 14:30:00"),只需要把解析格式符改成%d-%b-%Y %H:%M:%S,代码会自动计算对应的小数部分,比如这个时间的OLE日期会是43181.604166666664。
额外注意点
OLE日期有个历史遗留小坑:它错误地把1900年当成了闰年(实际上1900年不是闰年),如果你的目标日期在1900年3月1日之前,可能会出现一天的误差,但你的例子是2018年,完全不受影响~
内容的提问来源于stack exchange,提问作者user1315789
相关产品推荐
相关产品推荐

