我想从Unix时间转换为GPS时间,即计算自Python时代(1980年1月6日)开始以来的Python周数 . 我不是在寻找一年中的几周,而是1980年以来的几周 .
开始我的尝试是通过使用time.time()返回自1970年纪元以来的时间(称为Unix时间)并从该纪元和GPS开始日期之间经过的秒数中减去它来获得经过的秒数 .
这将返回一个正确的值,以秒为单位,自1980年以来的时间,但我想要GPS周数 . 是否有一个标准的Python函数返回这个?
NOTES
GPS日期表示为自纪元以来的周数和周秒数 . GPS时代不同 - 1980年1月6日00:00:00 . 此外,"GPS counts weeks"自纪元以来 - 一周的GPS周定义为星期日开始 . 注意:1月6日是1980年的第一个星期天.1
Unix时间系统有一个1970年1月1日00:00:00的纪元,ISO定义了一年中的第一周 - “包含1月第4天的那个,相当于说它是第一周到将新年重叠至少四天“ .
还有其他时间系统,最着名的是J2000 . 从一次性系统转换到另一次系统是非平凡的 .
为了处理GPS Time,Perl提供了DateTime :: Precise库,它通过额外的GPS操作执行常见的时间和日期操作 . 问题是,Python是否提供了类似的库?
2 回答
一个反函数可用于要点:https://gist.github.com/jeremiahajohnson/eca97484db88bcf6b124
请注意,此解决方案手动考虑POSIX和TAI之间的闰秒差异 . (有关闰秒,请参阅https://en.wikipedia.org/wiki/Leap_second)Leapseconds可在https://stackoverflow.com/a/33445945/1653571中使用,但此代码不使用它 .
因此,从unix时间转换回GPS也需要关注闰秒:
我也需要GPS周的那一天,因为我正在计算来自https://cddis.nasa.gov/Data_and_Derived_Products/GNSS/orbit_and_clock_products.html&c的GPS时钟和轨道文件的文件名 .
计算日差然后除以7
一种方法是使用python的
datetime
模块 . 一个有用的功能是,它允许您使用date.days
获取日期并将其转换为若干天 . 使用这些天,我们可以减去它们并除以7
(一周中的天数:p)以获得它们之间的几周 .但是,在将每个转换为几天之前,您需要先从该星期几中减去
date
. 这将为您提供该周的日期Monday
,这将消除一个错误 .要做到这一点,你可以这样做:
现在您已经拥有了他们周的
Monday
的日期,您需要减去它们以找到差异并除以7
以获得周数 .这给出了最终输出: