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

如何计算两个UTC时间的天数差?能否直接相减无需转换?

如何在Shell中计算两个UTC时间的天数差值?

首先直接给结论:不能直接对这两个字符串形式的时间变量做减法运算,Shell只能对数字执行算术操作,所以必须先把UTC时间字符串转换为Unix时间戳(即从1970-01-01 00:00:00 UTC开始的秒数),再进行计算。

另外先纠正你定义START_TIME的小错误:你用反引号包裹了固定时间字符串,这会导致Shell试图把2018-02-26T04:46:20Z当作命令执行,肯定会报错。正确的定义应该是用双引号或者直接赋值:

export START_TIME="2018-02-26T04:46:20Z"

下面是完整的实现步骤和示例脚本:

步骤1:将UTC时间转换为Unix时间戳

GNU date(Linux系统默认)可以直接识别ISO8601格式的UTC时间(比如你的YYYY-MM-DDTHH:MM:SSZ格式),用+%s参数就能输出对应的时间戳:

  • 对于当前UTC时间,你可以直接获取时间戳,不用先存成字符串:
    current_timestamp=$(date -u +%s)
    
    如果一定要保留CURRENT_TIME变量,也可以这样转换:
    export CURRENT_TIME=$(date -u +%FT%Z)
    current_timestamp=$(date -d "$CURRENT_TIME" +%s)
    
  • 对于固定的START_TIME,转换方式类似:
    start_timestamp=$(date -d "$START_TIME" +%s)
    

步骤2:计算天数差值

时间戳的差值是秒数,我们知道一天有86400秒,用整数除法就能得到天数:

# 计算秒数差值
diff_seconds=$((current_timestamp - start_timestamp))

# 转换为天数(Shell整数除法会自动截断小数部分)
diff_days=$((diff_seconds / 86400))

# 如果需要获取绝对值(比如不确定哪个时间更早)
abs_diff_days=$((diff_days < 0 ? -diff_days : diff_days))

完整示例脚本

# 正确定义起始UTC时间
export START_TIME="2018-02-26T04:46:20Z"

# 获取当前UTC时间戳
current_timestamp=$(date -u +%s)

# 将起始时间转换为时间戳
start_timestamp=$(date -d "$START_TIME" +%s)

# 计算差值
diff_seconds=$((current_timestamp - start_timestamp))
diff_days=$((diff_seconds / 86400))
abs_diff_days=$((diff_days < 0 ? -diff_days : diff_days))

# 输出结果
echo "两个时间的天数差值(带正负):$diff_days"
echo "天数差值的绝对值:$abs_diff_days"

兼容性提示

如果是在macOS系统上,date命令是BSD版本,语法略有不同,转换时间戳需要用-j、-f参数指定格式:

# macOS下转换START_TIME为时间戳
start_timestamp=$(date -j -u -f "%Y-%m-%dT%H:%M:%SZ" "$START_TIME" +%s)
# macOS下获取当前UTC时间戳
current_timestamp=$(date -j -u +%s)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:36:15