Apache 日志里常见的时间格式一般是 CLF(Common Log Format) 里的这种:
10/Oct/2023:13:55:36 +0800
也就是:
下面按常见场景给你几种转换方法。
格式拆解:
DD/Mon/YYYY:HH:MM:SS ±ZZZZ
示例:
10/Oct/2023:13:55:36 +0800
→ 2023-10-10 13:55:36 (东八区)
月份对照:
date -d "10/Oct/2023:13:55:36 +0800" "+%Y-%m-%d %H:%M:%S"
输出:
2023-10-10 13:55:36
转为 UTC:
date -u -d "10/Oct/2023:13:55:36 +0800" "+%Y-%m-%d %H:%M:%S"
假设日志行:
127.0.0.1 - - [10/Oct/2023:13:55:36 +0800] "GET /index.html"
awk -F'[' '{print $2}' access.log | awk -F']' '{print $1}' | \
while read t; do
date -d "$t" "+%Y-%m-%d %H:%M:%S"
done
from datetime import datetime
t = "10/Oct/2023:13:55:36 +0800"
dt = datetime.strptime(t, "%d/%b/%Y:%H:%M:%S %z")
print(dt)
print(dt.strftime("%Y-%m-%d %H:%M:%S"))
输出:
2023-10-10 13:55:36+08:00
2023-10-10 13:55:36
date -d "10/Oct/2023:13:55:36 +0800" +%s
int(dt.timestamp())
| 需求 | 方法 |
|---|---|
| 转标准时间 | date -d |
| 批量处理日志 | awk + date |
| 写脚本分析 | Python |
| 转 UTC | date -u |
| 转时间戳 | +%s |
如果你是想:
可以告诉我你的使用场景,我可以直接给你对应方案。