周顺的技术博客

  • 1、时间解析与格式化
  • 2、时间解析
  • 3、时间格式化
  • 4、时间范围比较(重点)
  • ☆ 时间范围比较
  • ☆ 时间范围过滤Nginx日志功能(重点)
  • 首页
  • 榜上有名
  • 文章归档
  • 读者排行
  • 豆瓣书影
  • 友情链接
  • DevOps (4)
  • Docker (4)
  • k8s (9)
  • linux (11)
  • Mysql (9)
  • Python (2)
  • Redis (1)
  • Shell (6)
  • 主题 (0)
  • 未分类 (0)

datetime时间模块

  • xiaoteng
  • 2025-12-12
  • 0

strptime: "parse" (解析) → 从字符串解析出时间,字符串 → 时间对象。

strftime: "format" (格式化) → 将时间格式化为字符串,时间对象 → 字符串。

1、时间解析与格式化

在日志分析中,时间字段通常是一个字符串格式(如 22/Nov/2024:10:00:00)。为了对时间字段进行操作,需要将其转换为 datetime 对象。Python 提供了强大的 datetime 模块,可以轻松完成时间的解析与格式化。

平常比较熟悉的时间格式:年-月-日 小时:分钟:秒

2、时间解析

  • 使用 datetime.strptime() 方法解析时间字符串。
  • 格式化字符串用于定义时间字段的格式。

案例:

from datetime import datetime

# 示例时间字符串
time_str = "22/Nov/2024:10:00:00"

# 解析时间字符串为 datetime 对象
log_time = datetime.strptime(time_str, "%d/%b/%Y:%H:%M:%S")

# 输出解析后的 datetime 对象
print("解析后的时间:", log_time)

说明:
from datetime import datetime
from 模块 import 函数
from 模块 import class类(里面有很多函数,调用函数,需要通过这个类)

解析后的时间: 2024-11-22 10:00:00

3、时间格式化

  • 使用 datetime.strftime() 方法将时间对象转换为特定格式的字符串。
  • 可用于生成自定义的时间输出格式。

案例:

# 将 datetime 对象转换为字符串
formatted_time = log_time.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的时间:", formatted_time)

格式化后的时间: 2024-11-22 10:00:00

4、时间范围比较(重点)

在日志分析中,经常需要筛选某个时间范围内的日志记录。通过比较两个 datetime 对象,可以轻松实现时间范围过滤。

☆ 时间范围比较

  • 使用 >=和<= 运算符比较时间对象。
  • 筛选出在指定时间范围内的日志记录。

案例:

# 定义时间范围
start_time = datetime.strptime("22/Nov/2024:10:00:00", "%d/%b/%Y:%H:%M:%S")
end_time = datetime.strptime("22/Nov/2024:10:10:00", "%d/%b/%Y:%H:%M:%S")

# 示例日志时间
log_time = datetime.strptime("22/Nov/2024:10:05:00", "%d/%b/%Y:%H:%M:%S")

# 检查日志时间是否在范围内
if start_time <= log_time <= end_time:
    print("日志时间在范围内")
else:
    print("日志时间不在范围内")

注意:Python 2.6及以后的版本提供了基本的日期时间处理能力(如字符串时间格式比较,但是要求格式必须完全一致,否则无法比较),但对于复杂的日期和时间操作,使用datetime模块会更为方便和强大。

☆ 时间范围过滤Nginx日志功能(重点)

案例:2025-01-15 02:00:00 ~ 06:00:00发现Nginx服务异常,先需要我们从Nginx的access.log访问日志中提取这段时间的日志信息,使用Python实现!

实现思路:

具体代码实现:

from datetime import datetime

# 读取日志文件并按时间范围筛选
def filter_logs_by_time(log_file, start_time, end_time):
    results = []
    with open(log_file, "r") as file:
        for line in file:
            parts = line.split()
            # 提取日志时间字段并解析为 datetime 对象
            log_time = datetime.strptime(parts[3][1:], "%d/%b/%Y:%H:%M:%S")
            # 检查时间是否在范围内
            if start_time <= log_time <= end_time:
                results.append(line.strip())
    return results

# 示例使用
if __name__ == "__main__":
    # 定义时间范围
    start_time = datetime.strptime("22/Nov/2024:10:00:00", "%d/%b/%Y:%H:%M:%S")
    end_time = datetime.strptime("22/Nov/2024:10:10:00", "%d/%b/%Y:%H:%M:%S")
    
    # 日志文件路径
    log_file = "nginx_access.log"
    
    # 筛选日志
    filtered_logs = filter_logs_by_time(log_file, start_time, end_time)
    print("指定时间范围内的日志记录:")
    for log in filtered_logs:
        print(log)
© 2026 周顺的技术博客
Theme by Wing
  • {{ item.name }}
  • {{ item.name }}