全面掌握Python时间处理

全面掌握Python时间处理

flyfish

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

基础知识

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

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

datetime 模块

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

基本用法
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 模块

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

基本用法
python 复制代码
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 模块

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

基本用法
python 复制代码
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的形式:

python 复制代码
from datetime import datetime

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

定时器实现

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

使用 time.sleep()

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

python 复制代码
import time

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

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

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

python 复制代码
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模块提供了一个调度器类,可以在指定时间执行计划任务。

python 复制代码
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秒后执行任务
获取某月日历
python 复制代码
import calendar

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

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

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

difference = date2 - date1
print(f"日期差: {difference.days} 天")
相关推荐
满怀冰雪18 分钟前
22-使用 PaddleClas 快速训练图像分类模型
人工智能·python·机器学习·分类·数据挖掘·paddlepaddle
gb421528733 分钟前
python中Web应用服务器
开发语言·前端·python
名明鸣冥2 小时前
k8s-agent架构思考(一)
python
DoLovya3 小时前
从零实现 ESP8266 + MQTT 智能门禁:公网一键开门、舵机控制、在线监控完整方案
python·物联网·mqtt·嵌入式·esp8266·门禁系统
AI情绪识别开源3 小时前
检信ALLEMOTION VibrationAI 2.4.0 12维度情绪识别开源源代码
开发语言·python
极创信息3 小时前
国产化信创适配认证高频术语:信创适配、软件自主可控、国产化率、代码溯源率、代码自主率、代码开源率是什么?
java·python·struts·eclipse·开源·php·hibernate
AC赳赳老秦4 小时前
语义采集进阶实战:利用 OpenClaw AI 语义识别自动提取网页核心信息,无需手动编写选择器
java·运维·服务器·python·信息可视化·deepseek·openclaw
Logintern094 小时前
什么时候应该用多进程什么时候用多线程呢?
开发语言·python
bboy枫亭4 小时前
Mac安装Miniconda3
python·conda·miniconda
无凭4 小时前
字节跳动 DeerFlow:Agent Harness 怎么让大模型主动向用户提问?
人工智能·python