全面掌握Python时间处理

发布于:2025-02-22 ⋅ 阅读:(39) ⋅ 点赞:(0)

全面掌握Python时间处理

flyfish

  • datetime: 最适合处理日期和时间,支持创建时间对象、格式化时间、计算时间差等。
  • time: 提供了获取时间戳、将时间戳转换为本地时间、暂停程序执行等功能。
  • timeit: 主要用于性能测试,帮助开发者了解某段代码的执行效率。

基础知识

在编程中,“时间”通常有两种主要形式:

  1. 时间点(Time Point):指某一特定时刻,如“2025年2月19日 11时17分”。
  2. 时间段(Duration or Time Interval):表示两个时间点之间的差异,如“3小时”。

datetime 模块

这是Python中最常用的用于处理日期和时间的模块。

基本用法
from datetime import datetime, timedelta

# 获取当前时间
now = datetime.now()
print("当前时间:", now)

# 创建一个指定的时间
specific_time = datetime(2025, 2, 19, 11, 17)
print("指定时间:", specific_time)

# 时间格式化输出
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的时间:", formatted_time)

# 计算时间差
future_time = now + timedelta(days=5, hours=3)
print("5天3小时后的时间:", future_time)

time 模块

这个模块提供了更多底层的时间操作功能。

基本用法
import time

# 获取当前时间戳(自纪元以来的秒数)
timestamp = time.time()
print("当前时间戳:", timestamp)

# 将时间戳转换为可读格式
local_time = time.localtime(timestamp)
readable_time = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
print("可读时间:", readable_time)

# 暂停程序执行
print("开始暂停...")
time.sleep(2)  # 暂停2秒
print("暂停结束")

# 高精度计时器
start_time = time.perf_counter()
# 执行一些代码
end_time = time.perf_counter()
print("代码执行耗时:", end_time - start_time, "秒")

timeit 模块

主要用于测量小段代码执行所需的时间,特别适合性能测试。

基本用法
import timeit

def test_function():
    """要测试的函数"""
    return [x for x in range(1000)]

# 使用timeit测量函数执行时间
execution_time = timeit.timeit(test_function, number=1000)  # 测试函数执行1000次的总时间
print("函数执行1000次的总时间:", execution_time, "秒")

# 使用default_timer进行高精度计时
start = timeit.default_timer()
test_function()  # 直接调用函数
end = timeit.default_timer()
print("单次执行时间:", end - start, "秒")

时间格式化符号

在Python中,使用strftime()函数可以将时间格式化为特定的字符串形式。
常见的日期和时间格式化符号:

符号 描述
%Y 四位数的年份(如2025)
%m 月份(01-12)
%d 月内的天数(01-31)
%H 24小时制的小时数(00-23)
%M 分钟数(00-59)
%S 秒数(00-59)
%a 本地简化星期名称(如Mon)
%A 本地完整星期名称(如Monday)
%b 本地简化的月份名称(如Jan)
%B 本地完整的月份名称(如January)
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地AM或PM的等价符
%U 一年中的星期数(00-53),星期天为一周的开始
%w 星期几(0-6),星期天为一周的开始
%W 一年中的星期数(00-53),星期一为一周的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% 百分号本身

例如,要格式化当前时间为%Y-%m-%d %H:%M:%S的形式:

from datetime import datetime

now = datetime.now()
formatted_time = now.strftime("%Y-%m-%d %H:%M:%S")
print("格式化后的时间:", formatted_time)

定时器实现

定时器可以通过多种方式实现,下面是几种常见的方式:

使用 time.sleep()

这是一个简单的延时方法,适合用于短时间的暂停。

import time

def timer(seconds):
    print(f"计时开始,等待 {seconds} 秒...")
    time.sleep(seconds)
    print("计时结束!")

timer(5)  # 等待5秒
使用 threading.Timer

这个方法适合需要在后台运行定时任务的情况。

import threading

def task():
    print("定时任务执行!")

def set_timer(seconds):
    timer = threading.Timer(seconds, task)
    timer.start()
    print(f"定时器设置完成,将在 {seconds} 秒后执行任务...")

set_timer(5)  # 5秒后执行任务
使用 sched 模块

sched模块提供了一个调度器类,可以在指定时间执行计划任务。

import sched
import time

scheduler = sched.scheduler(time.time, time.sleep)

def task(name):
    print(f"任务 {name} 执行于 {time.ctime()}")

def set_scheduler(seconds, name):
    scheduler.enter(seconds, 1, task, (name,))
    print(f"调度器设置完成,任务 {name} 将在 {seconds} 秒后执行...")
    scheduler.run()

set_scheduler(5, "example_task")  # 5秒后执行任务
获取某月日历
import calendar

cal = calendar.month(2025, 2)  # 获取2025年2月的日历
print("以下输出2025年2月份的日历:")
print(cal)
判断是否为闰年
import calendar

year = 2025
if calendar.isleap(year):
    print(f"{year} 是闰年")
else:
    print(f"{year} 不是闰年")
计算两个日期之间的差值
from datetime import datetime

date1 = datetime(2025, 2, 19)
date2 = datetime(2025, 2, 28)

difference = date2 - date1
print(f"日期差: {difference.days} 天")