Bash中计算特定格式日期的秒级时间差问题求助
解决日期秒级时间差计算输出为空的问题
你的代码存在两个关键问题,导致输出为空:
- 变量引用错误:计算差值时两次使用了同一个变量
currentDateTime,相当于自身减自身;更严重的是,date命令无法直接解析你提供的dd/Mon/yyyy:HH:mm:ss格式,导致时间戳转换失败,子命令执行报错,最终diff变量为空。 - 日期格式不兼容: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
相关产品推荐
相关产品推荐

