在Julia中验证GPS毫秒时间转UTC时间的方法是否正确
问题:已做UTC修正的GPS毫秒时间转UTC时间的逻辑是否正确?
我需要确认将LIDAR输出的已做UTC修正的GPS毫秒时间转换为UTC时间的逻辑是否正确,以下是我的Julia代码:
time_adj = capture_time + gps_correction = 1.3812925228868198e9 where gps_correction = 1e9 const gps_epoch = DateTime(1980, 1, 6) unix2datetime(time_adj + datetime2unix(gps_epoch))
执行结果为Dates.DateTime("2023-10-14T04:22:02.886"),请问该转换方式是否正确?
你的转换逻辑是正确的,但有几个细节需要明确
核心逻辑验证
GPS时间的起始基准是1980年1月6日00:00:00 UTC,而Unix时间的起始点是1970年1月1日00:00:00 UTC。你的代码本质是:
- 先算出GPS epoch对应的Unix时间戳(
datetime2unix(gps_epoch)) - 把从GPS epoch到目标时间的秒级偏移量(
time_adj)加到这个Unix时间戳上,得到目标时间的Unix时间戳 - 最后通过
unix2datetime转换为标准UTC DateTime对象
这个思路完全符合时间转换的底层规则,最终得到的2023-10-14T04:22:02.886结果是正确的。
需要留意的细节
- 你提到输入是GPS毫秒时间,但代码里的
time_adj是秒级数值(1.38e9秒≈43.7年,正好对应1980到2023的时间跨度)。如果原始LIDAR输出确实是毫秒单位,你需要先将其除以1000转换为秒,否则转换结果会比实际时间早1000倍。 - 关于
gps_correction = 1e9:通常GPS时间与UTC时间的差值是闰秒(截至2023年为18秒),但你这里用了10亿秒,看起来是用来将原始capture_time调整为从GPS epoch开始的秒偏移量。只要time_adj确实代表"从1980-01-06到目标时间的总秒数",这个修正就是合理的,不会影响转换逻辑的正确性。
内容的提问来源于stack exchange,提问作者F612
相关产品推荐
相关产品推荐

