Excel DATEVALUE机制下时间相减得小数的原理及Python实现问询
关于Excel时间减法得小数及Python实现的问题
为什么Excel中时间减法会得到小数结果
Excel采用序列值存储日期和时间:
- 整数部分代表从1900年1月0日开始的天数
- 小数部分代表一天中的时间占比(1 = 24小时)
你表格里的08:16:17和09:00:00属于纯时间,对应序列值的小数部分。两者的时间差为43分43秒,换算成一天的占比就是:
(43*60 + 43) / (24*60*60) = 2623 / 86400 ≈ 0.030359
这就是=B-A得到小数的原因,DATEVALUE只是把文本格式的时间转成对应的序列值,本质还是基于这个存储规则计算。
用Python实现相同结果
可以借助datetime模块解析时间,计算时间差后转换成一天的占比,代码示例如下:
from datetime import time # 解析两个时间字符串 time_a = time.fromisoformat("08:16:17") time_b = time.fromisoformat("09:00:00") # 计算两个时间的总秒数 total_sec_a = time_a.hour * 3600 + time_a.minute * 60 + time_a.second total_sec_b = time_b.hour * 3600 + time_b.minute * 60 + time_b.second # 计算时间差的秒数,再除以一天的总秒数得到占比 diff_sec = total_sec_b - total_sec_a result = diff_sec / (24 * 3600) print(round(result, 6)) # 输出:0.030359
内容的提问来源于stack exchange,提问作者purelyawwesome
相关产品推荐
相关产品推荐

