Python 3.2以下版本如何将datetime转换为Delphi TDateTime?
Python 3.2以下版本:将datetime转换为Delphi TDateTime
我来帮你搞定这个兼容问题~ 首先先明确Delphi TDateTime的规则:它是以1899年12月30日为起始点的双精度浮点数,整数部分代表起始日到目标日的天数,小数部分则是当天时间占一整天的比例。
你原来的代码思路是对的,但timedelta.total_seconds()确实只在Python 3.2及以上版本才支持。那我们可以手动计算总秒数来替代这个方法,下面是兼容低版本的实现:
import datetime def pdt2ddt(pydt): # Python datetime 转 Delphi TDateTime(兼容Python <3.2) start = datetime.datetime(1899, 12, 30) delta = pydt - start # 手动计算总秒数:天数转秒 + 剩余秒数 + 微秒转秒 total_seconds = delta.days * 86400 + delta.seconds + delta.microseconds / 1000000 # 转换为占一天的比例,加上天数得到TDateTime值 return delta.days + total_seconds / (3600 * 24)
验证一下
用你给出的测试值datetime.datetime(2018, 4, 1, 16, 22, 9, 920000)代入计算,得到的结果正好是43191.68205925926,和预期一致。
原理说明
- 对于
timedelta对象,我们可以直接获取days(整数天数)、seconds(不足一天的秒数,范围0-86399)、microseconds(剩余微秒数,范围0-999999)这三个属性 - 把这三部分转换成总秒数后,除以一天的总秒数(86400)得到小数部分,再加上整数天数,就得到了标准的Delphi TDateTime格式。
内容的提问来源于stack exchange,提问作者Игорь Тимофеев
相关产品推荐
相关产品推荐

