我有一个UTC时间(纪元Unix时间),其格式设置为时间戳,如下所示。 1496224620 (人类可读的值:2017年5月31日09:57:00)
1496224620
我需要将格式化为Unix时间的时间戳转换为GPS时间格式,如下所示。 1180259838 (人类可读的值:2017年5月31日09:57:00)
1180259838
我需要一个python程序(算法对我来说很好)将Unix时间格式的时间戳转换为GPS时间格式的时间戳。
有一个PHP程序可以这样做。我可以从PHP代码更改为Python代码,以自己拥有一个Python程序。但是我认为还有一种捷径(Python的内置函数)可以更有效地实现我的期望。 这是PHP程序https://www.andrews.edu/~tzs/timeconv/timealgorithm.html的链接
只需从UNIX时间中减去315964782。
GPS时间从1980年1月5日开始。UNIX时间从1970年1月1日开始。它们只是具有不同的起点,即Epochs。这两个信号出现时间之间的差的这两个日期之间的秒数 PLUS 18 GPS闰秒(迄今为止)。
正如其他人指出的那样,随着地球自转逐渐变慢,GPS leap秒会定期添加。
我们是否必须在每次the秒发生时(例如,下一个2018年,2019年…)手动更新我们的源代码?有什么可行的方法可以防止此问题?
许多设备都有一条消息,指示有效的GPS秒的“当前”秒数。我的C ++ NeoGPS库有一个示例程序,该程序向ublox设备请求当前的GPS秒数(此处定义为二进制消息)。有关NAV- TIMEGPS消息的更多信息,请参见ublox NEO-xx规格。
其他制造商可能拥有自己的协议和消息,以获取当前的GPS leap秒。
大多数GPS设备以UTC报告时间,并且已经包括the秒。除非您使用基于一周开始(周日午夜)的GPS时间,否则您无需知道GPS leap秒。
如果您尝试从“自周开始的GPS时间”转换,那么您还需要知道当前的GPS周编号,以将“周的GPS时间”转换为UTC。
ublox设备报告一些修复信息,其时间戳为“自一周开始以来的GPS毫秒”。 这个NeoGPS文件显示了几种在“星期几以来的GPS毫秒”和UTC之间进行转换的方法。