Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Python的UTC时间到GPS时间转换器_Python_Gps_Utc - Fatal编程技术网

基于Python的UTC时间到GPS时间转换器

基于Python的UTC时间到GPS时间转换器,python,gps,utc,Python,Gps,Utc,我有一个UTC时间(epoch Unix时间)格式为时间戳,如下所示。 149624620 (人类可读值:2017年5月31日09:57:00) 我需要将格式为Unix时间的时间戳转换为GPS时间格式,如下所示。 1180259838 (人类可读值:2017年5月31日09:57:00) 我需要一个python程序(算法对我来说很好)将格式为Unix时间的时间戳转换为格式为GPS时间的时间戳 有一个PHP程序可以这样做。我可以从PHP代码改为Python代码,自己编写Python程序。但我认为还

我有一个UTC时间(epoch Unix时间)格式为时间戳,如下所示。
149624620

(人类可读值:2017年5月31日09:57:00)

我需要将格式为Unix时间的时间戳转换为GPS时间格式,如下所示。
1180259838

(人类可读值:2017年5月31日09:57:00)

我需要一个python程序(算法对我来说很好)将格式为Unix时间的时间戳转换为格式为GPS时间的时间戳

有一个PHP程序可以这样做。我可以从PHP代码改为Python代码,自己编写Python程序。但我认为还有一条捷径(Python的内置函数)可以更有效地实现我的期望。
这是PHP程序的链接

那么:

import datetime
datetime.datetime.fromtimestamp(int("1284101485")).strftime('%B-%Y-%d %H:%M:%S')

只需从UNIX时间中减去315964782

GPS时间从1980年1月5日开始。UNIX时间从1970年1月1日开始。他们只是有不同的出发点,或者说。这两个时期之间的差异是这两个日期之间的秒数加上18 GPS闰秒(到目前为止)

正如其他人所注意到的,随着地球自转速度的逐渐减慢,周期性地增加

我们必须在每次发生闰秒时手动更新源代码(例如,下一次2018、2019等)?有没有可行的方法来防止这个问题

许多设备都有一条信息,指示“当前”有效的GPS秒数。我的C++库有一个请求从UBLX设备(二进制消息定义)中获取当前GPS秒数的请求。有关NAV-TIMEGPS信息的更多信息,请参阅ublox NEO xx规格

其他制造商可能有自己的协议和消息来获取当前GPS闰秒

然而: 大多数GPS设备以UTC为单位报告时间,其中已包括闰秒。除非您使用的是基于一周开始(周日午夜)的GPS时间,否则您不需要知道GPS闰秒

如果您正试图从“从一周开始的GPS时间”转换,那么您还需要知道将“一周的GPS时间”转换为UTC的当前时间


ublox设备会报告一些带有时间戳的修复信息,时间戳为“从本周开始的GPS毫秒数”。显示了几种在“从本周开始的GPS毫秒数”和UTC之间转换的方法。

它无法解决我的问题。我需要将
149624620
转换为
1180259838
(从Unix时间戳转换为GPS时间戳)。OP链接到的代码包含一个静态闰秒列表。我不知道这个名单是否解释了2016年底的闰秒。在任何情况下,代码都将在下一个闰秒后过时。任何解决方案都必须有一种方法来访问自GPS开始以来所有闰秒的最新列表。@Gerard Ashton:该列表在2016年底有闰秒(
1167264017
)。根据你的评论,我想到了一个问题:如果下一个闰秒是不可预测的,我们怎么知道它何时会发生?每次闰秒发生时,我们都必须手动更新源代码(例如,2018年、2019年等)?有什么可行的方法来防止这个问题吗?我知道的唯一方法是以可预测的格式下载一个列表,例如并解析它。你可以利用这样一个事实,即官方标准只允许在一个月结束时进行检查,因此你可以跟踪上次检查的时间,并且只检查距离上次检查是否已经一个月了。距离下一次飞跃还有6个月左右。如果你想在遥远的将来改变约会,很难,你不能。@Gerard Ashton:谢谢。我下载了你的列表。这是2017年1月1日最新的闰秒列表。通过你的回答“如果你想在遥远的将来转换日期,很难,你不能。”我可以清楚地知道,在遥远的未来(例如未来2年),没有办法知道闰秒。在下面的slash-dev答案中,我们必须依靠一些设备来了解未来的闰秒(例如ublox)。因此,如果没有这类设备,我们无法知道未来的闰秒。无论如何,非常感谢你的回答。谢谢你的回答。“只需从UNIX时间中减去
315964782
”是一个正确的答案,我知道
315964782
目前有效(2017年6月)。它可能在2017年12月31日和未来几年被淘汰。作为您的解释,我理解如果我们想知道未来的闰秒,我们必须使用一些设备来指示闰秒(您的示例是ublox设备)。如果没有这样的设备,我们就不能用“独立”的python程序指示闰秒。“单机版”指的是没有任何GPS设备的python程序。我不太理解您在[b]中的解释,但是[\b],“基于周初的GPS时间”。我只是在调查GPS时间和Unix时间,但通过您的回答,我可以了解一个基本知识:我们必须使用GPS设备在遥远的将来获取闰秒。如果您使用GPS设备获取GPS闰秒,您应该知道GPS设备也可以提供当前UTC时间。它为您将GPS时间转换为UTC时间。但是,在一个独立的系统中,无法获得GPS闰秒。国际地球自转服务机构宣布闰秒是必要的。包装胶::模块gpstime不是在1980年1月6日吗?(“此计数器的原始来源是1980年1月5日至1月6日午夜。”in)