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

为何Skyfield与datetime转换同一Unix时间戳的UTC时间差27秒?

为什么datetime和Skyfield转换Unix时间戳结果差27秒?
  • 先搞清楚Unix时间戳的本质:它是从1970-01-01 UTC开始累计的SI标准秒数,完全不考虑闰秒——也就是说,UTC每插入一次闰秒,Unix时间戳不会跟着多算一秒,始终保持线性增长。
  • Python的datetime.utcfromtimestamp()就是直接把这个线性秒数映射成UTC时间,它的UTC模型里没有闰秒,所以得到的是2022-09-26 14:47:49。
  • 你用Skyfield的方式错了!load.timescale().utc(1970, 1, 1, 0, 0, 1664203669)这个调用里,最后一个参数是UTC时间体系下的秒数,这个体系是包含闰秒的。你把Unix时间戳(不含闰秒的数值)直接塞进去,相当于告诉Skyfield:“从1970年1月1日UTC零点开始,过1664203669个UTC秒(含闰秒)”,但因为到2022年9月为止UTC比Unix时间戳多了27个闰秒,所以最终得到的时间就会比实际早27秒。

正确的Skyfield用法应该用专门处理Unix时间戳的方法:

from skyfield.api import load
ts = load.timescale()
t = ts.from_unix_time(1664203669)
print(t.utc_strftime())

运行后得到的结果会和datetime的输出一致:2022-09-26 14:47:49 UTC

补充说明:Skyfield的utc()方法是用来构造含闰秒的UTC时间的,比如要表示UTC的2016-12-31 23:59:60这个闰秒时刻,就可以用ts.utc(2016, 12, 31, 23, 59, 60),不能用Unix时间戳来套这个方法。

内容的提问来源于stack exchange,提问作者KDecker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:15:49