GPS时间 转 UTC时间
1、GPS时间是由:周、秒组成
GPS时间系统是基于GPS星载原子钟和地面监控站原子钟的一种原子时基准,与国际原子时保持有19秒的常数差,并在GPS标准历元1980年1月6日零时与UTC保持一致。
GPS时间系统(GPST)的起点为1980年1月6日0时0分0秒,在起始时刻,GPST与UTC时对齐,两种时间系统给出的时间相同。由于UTC时存在跳秒现象,因此一段时间后,两种时间系统会相差n个整秒,其中n为这段时间内UTC积累的跳秒数。GPS时间系统的最大时间单位是周,一周等于604800秒。由于在储存周数的时候,用了10个比特,2的10次方是1024,所以每1024周(即7168天)为一循环周期。当WN从1023变为0时,就会发生GPS周数翻转,出现迎接新一周的说法。1024周对应到年上大概就是19.7年。从GPS系统时的起始时刻算起,上一次出现GPS周数翻转是1999年8月21日,这次就正好是2019年4月6日,2038年11月20日将会出现下一次GPS周数翻转。
这种周数翻转的现象类似于小朋友数数时每次数到100就又从0开始数的情形,而按10进制的计数规则,100以后是101,200以后是201……以此类推。对于GPS接收机来说,如果在周数翻转时刻未升级,都将在周归零日错认为1980年1月6日。为了避免影响开发者使用,高德开放平台在GPS周数翻转时刻采用了系统时间和GPS对比的方法,以解决周数翻转带来的时间跳变问题。
import sys
from datetime import datetime, timedelta
def gps_to_utc(gps_week, gps_seconds):
# GPS 周起始时间
gps_epoch = datetime(1980, 1, 6)
# 计算GPS周对应的总天数
total_days = gps_week * 7
#计算 GPS秒对应的时间差,GPS时间与UTC时间在秒上相差18秒
time_diff = timedelta(days=total_days, seconds=gps_seconds - 18)
#计算UTC时间
utc_time = gps_epoch + time_diff
return utc_time
def GPS_To_UTC(argv):
gps_weeks = int(argv[0])
gps_secs = float(argv[1])
utc_time = gps_to_utc(gps_weeks, gps_secs)
print(utc_time)
if __name__ == "__main__":
if len(sys.argv)>3:
print("Usage:\n < GPS weeks > < GPS seconds >")
sys.exit()
if 3== len(sys.argv):
GPS_To_UTC(sys.argv[1:])
else:
gps_weeks = 2322
gps_secs = 112576.3 #output: 2024.07.08 07:15:58.3
utc_time = gps_to_utc(gps_weeks, gps_secs)
print(utc_time)
评论已关闭