Bash中时间字符串与Unix秒数互转结果异常的问题排查
Bash中时间字符串与Unix秒数互转结果异常的问题排查
嘿,兄弟,我一眼就瞅出你这命令哪里踩坑了😎!
先给你捋明白:你第一步把时间转成Unix秒数的操作完全没问题:
$ dt=$(date '+%s' -u --date="2024-11-25 20:31:00") $ echo $dt 1732566660
这个1732566660确实是对应2024-11-25 20:31:00的正确Unix时间戳(就是从1970年元旦零点UTC开始算的秒数)。
但你转回去的时候用了--date="$dt seconds",这就犯了个典型的语法误解!date命令看到这种写法,会把它当成当前系统时间加上$dt这么多秒——这可不就算出几十年后的离谱时间了嘛!
正确的打开方式是:当你要把Unix秒数转成时间字符串时,必须用@前缀把秒数包起来,告诉date“这是个Unix时间戳,直接解析它”,命令改成这样:
$ date '+%F %T' -u --date="@$dt" 2024-11-25 20:31:00
你再跑一遍试试,结果肯定和你最初的时间完全对上!
顺便补个小提醒:如果是要给某个时间做偏移(比如给2024-11-25加30秒),那写法是--date="2024-11-25 20:31:00 +30 seconds";要是基于当前时间偏移,就用--date="+1 hour"这种格式,别和Unix时间戳的写法搞混啦!
备注:内容来源于stack exchange,提问作者Andreas G
相关产品推荐
相关产品推荐

