You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

夏令时影响mktime计算结果,寻求GPS时间自动计算方案

解决GPS时间自动计算的时区问题

我来帮你搞定这个不需要手动调整时区就能准确计算GPS时间的问题~

问题根源

你的核心问题在于:mktime 默认会使用系统本地时区来解析输入的时间字符串,但你提供的是GMT(和UTC等价)时间,而GPS时间的基准是UTC的1980-06-01 00:00:00,再加上累计闰秒(这里的lap=18就是闰秒数)。之前手动设置TZ=UTC-2能得到正确结果,本质是临时抵消了本地时区和UTC的差异,但这不是通用的自动方案。

最优解决方案

我们可以直接在gawk内部强制使用UTC时区解析时间,同时确保基准时间ts也是基于UTC计算的,这样就不用手动调整任何外部时区设置了:

gawk -F'[/: ]' -v ts=$(date -d'01/06/1980 UTC' +%s) -v lap=18 '
BEGIN { ENVIRON["TZ"] = "UTC" }  # 强制gawk用UTC解析所有时间
{$1=""; d=sprintf("20%s", $0); print mktime(d)+lap-ts }' file

代码细节解释

  • BEGIN { ENVIRON["TZ"] = "UTC" }:在gawk启动时设置环境变量TZ为UTC,这样mktime处理时间字符串时,会直接把它当作UTC时间,彻底规避本地时区(包括夏令时)的干扰。
  • date -d'01/06/1980 UTC' +%s:明确让date以UTC时区计算GPS的起始时间戳,确保基准值和GPS系统的起始时间完全对齐。
  • 剩余逻辑和你原有代码一致:拼接年份为20xx格式,转换为时间戳后加上闰秒,再减去起始时间戳得到最终的GPS时间。

验证效果

用你提供的输入数据运行这段代码,会直接输出符合预期的结果:

1210925927 1210926043 1210926080

这样不管你的系统本地时区是什么,都能自动计算出准确的GPS时间,再也不用手动调整TZ偏移啦~

内容的提问来源于stack exchange,提问作者OXXO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:46:54