温馨提示×

centos如何计算时间差时间戳

小樊
32
2026-08-03 04:51:22
栏目: 智能运维

CentOS(Linux) 中计算时间差的时间戳(秒/毫秒/微秒),常见做法如下,按使用场景给你总结。


一、用 date 计算两个时间的时间差(最常用)

1️⃣ 计算两个具体时间的差值(秒)

t1=$(date -d "2025-01-01 08:00:00" +%s)
t2=$(date -d "2025-01-01 10:30:00" +%s)

echo $((t2 - t1))

✅ 输出:

9000

%s 表示 Unix 时间戳(秒)


2️⃣ 计算当前时间与某个时间的差

t1=$(date -d "2025-01-01 08:00:00" +%s)
t2=$(date +%s)

echo $((t2 - t1))

二、计算毫秒 / 微秒级时间差

1️⃣ 使用 date +%s%3N(毫秒)

⚠️ 需要较新版本的 coreutils(CentOS 7+ 一般支持)

t1=$(date +%s%3N)
sleep 1.2
t2=$(date +%s%3N)

echo $((t2 - t1))

✅ 输出类似:

1200

2️⃣ 使用 date +%s%6N(微秒)

t1=$(date +%s%6N)
sleep 0.5
t2=$(date +%s%6N)

echo $((t2 - t1))

三、在 Shell 脚本中计算时间差(推荐写法)

start=$(date +%s)
# 执行命令
sleep 3
end=$(date +%s)

diff=$((end - start))
echo "耗时: ${diff} 秒"

四、使用 expr(老系统兼容)

t1=$(date -d "2025-01-01 08:00:00" +%s)
t2=$(date -d "2025-01-01 09:00:00" +%s)

expr $t2 - $t1

五、使用 awk 计算时间差(适合日志)

echo "2025-01-01 08:00:00 2025-01-01 10:30:00" | \
awk '{
  cmd="date -d \""$1" "$2"\" +%s"; cmd | getline t1; close(cmd)
  cmd="date -d \""$3" "$4"\" +%s"; cmd | getline t2; close(cmd)
  print t2-t1
}'

六、常见时间格式对照表

格式 含义
%s
%s%3N 毫秒
%s%6N 微秒
%Y-%m-%d %H:%M:%S 标准时间

七、注意事项(CentOS 特有)

✅ CentOS 7 / 8 / Stream 都支持 date -d
CentOS 6 不支持 %N,毫秒/微秒不可用
✅ 建议 CentOS 7+ 使用


如果你有具体场景(如:日志时间差、程序运行时间、cron 时间差、纳秒级),可以告诉我,我可以给你更精确的方案。

0