栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从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
封装)。

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号