You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:40:12