You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux touch命令相对时间设置结果异常求助

解决Bash touch命令相对时间调整的异常问题

你遇到的这个问题根源在于**touch -d的日期解析逻辑把带空格的相对时间表达式错误识别成了时区偏移**,导致时间计算完全偏离预期。

问题出在哪?

当你写touch -d '27 May 2022 05:31:12 - 1 hour'时,中间的空格让解析器误以为- 1是UTC-1的时区偏移,而不是“减去1小时”的相对调整。它会把你指定的05:31:12当成UTC-1时区的时间,再转换为你的本地时区(UTC-4),自然就出现了和预期差2小时的结果;同理,+ 1 hour会被识别为UTC+1时区,转换后差了4小时。

正确的写法

调整相对时间的语法,有两种可靠的方式:

  1. 去掉运算符和数字之间的空格
    # 减1小时
    touch -d '27 May 2022 05:31:12 -1 hour' test.txt
    # 加1小时
    touch -d '27 May 2022 05:31:12 +1 hour' test.txt
    
  2. 把相对调整部分放在日期字符串的最前面
    # 减1小时
    touch -d '-1 hour 27 May 2022 05:31:12' test.txt
    # 加1小时
    touch -d '+1 hour 27 May 2022 05:31:12' test.txt
    

验证一下

date命令先测试解析结果(touch -ddate -d共享同一解析逻辑):

# 错误写法的结果(识别为时区)
$ date -d '27 May 2022 05:31:12 - 1 hour' -R
Fri, 27 May 2022 03:31:12 -0400

# 正确写法的结果(相对时间调整)
$ date -d '27 May 2022 05:31:12 -1 hour' -R
Fri, 27 May 2022 04:31:12 -0400

这个问题是GNU date/touch的解析规则导致的——相对时间运算符和数字之间不能有空格,否则会被优先解析为时区偏移。调整语法后就能得到符合预期的结果了。

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

火山引擎 最新活动