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)




















标签: none

评论已关闭