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

Bash中计算特定格式日期的秒级时间差问题求助

解决日期秒级时间差计算输出为空的问题

你的代码存在两个关键问题,导致输出为空:

  1. 变量引用错误:计算差值时两次使用了同一个变量currentDateTime,相当于自身减自身;更严重的是,date命令无法直接解析你提供的dd/Mon/yyyy:HH:mm:ss格式,导致时间戳转换失败,子命令执行报错,最终diff变量为空。
  2. 日期格式不兼容:GNU date默认无法识别日期与时间之间用冒号分隔的格式,需要调整格式或指定输入解析规则。

修复后的代码示例

方法1:替换日期格式中的分隔符

currentDateTime="08/Sep/2022:05:26:13"
logDateTime="07/Sep/2022:04:58:30"

# 将日期字符串中第一个冒号替换为空格,让date能正确识别
current_ts=$(date -d "${currentDateTime/: / }" +'%s')
log_ts=$(date -d "${logDateTime/: / }" +'%s')

# 计算秒级差值
diff=$((current_ts - log_ts))
echo $diff

方法2:指定date的输入格式(GNU date支持)

currentDateTime="08/Sep/2022:05:26:13"
logDateTime="07/Sep/2022:04:58:30"

# 通过--date-format指定输入格式,直接转换为时间戳
current_ts=$(date -d "$currentDateTime" +'%s' --date-format='%d/%b/%Y:%H:%M:%S')
log_ts=$(date -d "$logDateTime" +'%s' --date-format='%d/%b/%Y:%H:%M:%S')

diff=$((current_ts - log_ts))
echo $diff

非GNU环境适配(如BSD date)

如果使用的是BSD版本的date,需要用-j -f参数指定输入格式:

currentDateTime="08/Sep/2022:05:26:13"
logDateTime="07/Sep/2022:04:58:30"

current_ts=$(date -j -f "%d/%b/%Y:%H:%M:%S" "$currentDateTime" +'%s')
log_ts=$(date -j -f "%d/%b/%Y:%H:%M:%S" "$logDateTime" +'%s')

diff=$((current_ts - log_ts))
echo $diff

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:50:28