Мое предположение:
Согласно https://en.wikipedia.org/wiki/Epoch_(computing)#Notable_epoch_dates_in_computing, эпоха GPS - 6 января 1980 года, GPS counts weeks (a week is defined to start on Sunday) and 6 January is the first Sunday of 1980
И согласно http://leapsecond.com/java/gpsclock.htm, GPS time was zero at 0h 6-Jan-1980 and since it is not perturbed by leap seconds GPS is now ahead of UTC by 18 seconds.
Итак, мы должны определить gps_epoch
и вычесть заданные високосные секунды, чтобы иметь utc datetime
from datetime import datetime, timedelta
import pytz
def gps_datetime(time_week, time_ms, leap_seconds):
gps_epoch = datetime(1980, 1, 6, tzinfo=pytz.utc)
# gps_time - utc_time = leap_seconds
return gps_epoch + timedelta(weeks=time_week, milliseconds=time_ms, seconds=-leap_seconds)
В вашем примере
>>>gps_datetime(2077, 295584830.0,18.0)
datetime.datetime(2019, 10, 30, 10, 6, 6, 830000, tzinfo=<UTC>)
>>>gps_datetime(2077, 295584830.0,18.0).timestamp()
1572429966.83
Но яЯ довольно далеко от ожидаемого результата (1572430625230
, даже если он выражен в мс)
Не забудьте pip install pytz