温馨提示×

apache日志时间怎么转换

小樊
40
2026-10-03 14:41:50
栏目: 编程语言

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 (东八区)

月份对照:

  • Jan=1月, Feb=2月, Mar=3月, Apr=4月
  • May=5月, Jun=6月, Jul=7月, Aug=8月
  • Sep=9月, Oct=10月, Nov=11月, Dec=12月

二、Linux 命令行转换

1️⃣ date 命令(推荐)

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"

2️⃣ 从日志中提取并转换

假设日志行:

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

三、Python 转换

使用 datetime

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

四、转成 Unix 时间戳

Linux

date -d "10/Oct/2023:13:55:36 +0800" +%s

Python

int(dt.timestamp())

五、常见需求场景

需求 方法
转标准时间 date -d
批量处理日志 awk + date
写脚本分析 Python
转 UTC date -u
转时间戳 +%s

如果你是想:

  • ✅ ELK / Grafana 里解析
  • ✅ Nginx / Apache 格式统一
  • ✅ 按小时统计访问量

可以告诉我你的使用场景,我可以直接给你对应方案。

0 踩