1 回答
TA贡献1828条经验 获得超3个赞
考虑到特殊的 Garmin 纪元,它比 Unix 时间戳纪元晚了 631065600 秒,计算需要在那个特殊的时间发生(如果它只是一个正常的偏移量就不会出现这种情况,但这些偏移量并不是严格相加的所以时间的“绝对价值”很重要)。只需减去 631065600:
dt_offset = datetime.datetime(2019,4,30,22,0,0,0)
timestamp = int(datetime.datetime.timestamp(dt_offset)) - 631065600
timestamp_16 = 31132
以任何合理的方式应用时间增量,例如:
mesgTimestamp = timestamp
mesgTimestamp += ( timestamp_16 - ( mesgTimestamp & 0xFFFF ) ) & 0xFFFF
或者:
mesgTimestamp = timestamp + ((timestamp_16 - timestamp) & 0xffff)
或者:
mesgTimestamp = (timestamp & 0xffff0000) | timestamp_16
if mesgTimestamp < timestamp:
mesgTimestamp += 0x10000
使用生成的时间戳时再次应用 Garmin 纪元偏移:
print('New:', datetime.datetime.fromtimestamp(mesgTimestamp + 631065600, pytz.timezone('Europe/Zurich')))
结果:New: 2019-05-01 00:01:00+02:00足够接近?
添加回答
举报