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封装)。
这三种方法均产生相同的结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)