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

Linux下计算时分秒.微秒格式时间戳差值的命令方案

解决仅时分秒.微秒格式的时间差值计算问题

错误原因

date命令的-d参数无法直接识别仅包含时分秒.微秒的格式,它需要完整的日期时间信息(如年月日)才能解析,因此直接传入这类时间串会触发"invalid date"错误。

解决方案

方法1:补充日期后用date命令计算(保留微秒精度)

给时间串补充当前日期,让date能解析为完整时间,再提取纳秒级时间戳计算差值:

startDatetime="12:53:12.219691"
endDatetime="12:53:12.846539"

# 转换为带今日日期的时间,提取秒+纳秒的时间戳
start_ts=$(date -d "today $startDatetime" +%s%N)
end_ts=$(date -d "today $endDatetime" +%s%N)

# 计算差值并转换为秒(保留6位小数,对应微秒)
diff=$((end_ts - start_ts))
echo "scale=6; $diff / 1000000000" | bc

执行后会输出类似0.626848的结果,即两个时间的秒级差值(含微秒)。

方法2:用awk直接拆分计算(无需依赖date)

直接拆分时间字段计算总秒数,避免date的格式限制:

startDatetime="12:53:12.219691"
endDatetime="12:53:12.846539"

echo "$startDatetime $endDatetime" | awk -F'[:. ]' '{
    # 计算起始时间总秒数(时*3600 + 分*60 + 秒 + 微秒/1e6)
    start_total = $1*3600 + $2*60 + $3 + $4/1000000
    # 计算结束时间总秒数
    end_total = $5*3600 + $6*60 + $7 + $8/1000000
    # 输出差值
    print end_total - start_total
}'

该命令会直接输出精确到微秒的差值。

若仅需整数秒差值

如果不需要微秒精度,可对结果取整,比如在方法1中用:

echo "scale=0; $diff / 1000000000" | bc

或在方法2中修改print语句为print int(end_total - start_total)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 19:40:20