如何从Python中的GPS取消分段时间获取当前日期和时间

如何从Python中的GPS取消分段时间获取当前日期和时间,第1张

如何从Python中的GPS取消分段时间获取当前日期和时间

GPS时间与UTC同步开始

1980-01-06 (UTC) == 1980-01-06(GPS)
。两者都以秒为单位计时。GPS时间和UTC时间之间的时差随着(插入)leap秒的增加而增加。

要找到正确的UTC时间,您需要知道在给定GPS时间之前发生的of秒数:

#!/usr/bin/env pythonfrom datetime import datetime, timedelta# utc = 1980-01-06UTC + (gps - (leap_count(2014) - leap_count(1980)))utc = datetime(1980, 1, 6) + timedelta(seconds=1092121243.0 - (35 - 19))print(utc)
输出量
2014-08-15 07:00:27 # (UTC)

leap_count(date)
给定日期之前引入的of秒数。在TAI-UTC表中(请注意:该网站是leap秒的权威来源。它发布了公告C并宣布了新的leap秒):

1980..: 19s 2012..: 35s

因此:

(leap_count(2014) - leap_count(1980)) == (35 - 19)

如果您使用的是Unix,则可以使用

"right"
时区从TAI时间获取UTC时间(并且很容易从GPS时间获取TAI时间:TAI = GPS +
19秒(恒定偏移量)
):

#!/usr/bin/env pythonimport osimport timeos.environ['TZ'] = 'right/UTC' # TAI scale with 1970-01-01 00:00:10 (TAI) epochtime.tzset() # Unixfrom datetime import datetime, timedeltagps_timestamp = 1092121243.0 # inputgps_epoch_as_gps = datetime(1980, 1, 6) # by definitiongps_time_as_gps = gps_epoch_as_gps + timedelta(seconds=gps_timestamp) gps_time_as_tai = gps_time_as_gps + timedelta(seconds=19) # constant offsettai_epoch_as_tai = datetime(1970, 1, 1, 0, 0, 10)# by definitiontai_timestamp = (gps_time_as_tai - tai_epoch_as_tai).total_seconds() print(datetime.utcfromtimestamp(tai_timestamp)) # "right" timezone is in effect!
输出量
2014-08-15 07:00:27 # (UTC)

如果您从相应的中提取seconds秒列表,则可以避免更改时区

tzfile(5)
。它是前两种方法的组合,其中自动使用第一种方法的跃点计数计算,并使用第二种方法的自动更新
tzdata
(tz数据库的系统软件包):

>>> from datetime import datetime, timedelta>>> import leapseconds>>> leapseconds.gps_to_utc(datetime(1980,1,6) + timedelta(seconds=1092121243.0))datetime.datetime(2014, 8, 15, 7, 0, 27)

其中

leapseconds.py
可以从提取闰秒
/usr/share/zoneinfo/right/UTC
文件(的一部分
tzdata
封装)。

这三种方法均产生相同的结果。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5666682.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存