全面掌握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} 天")
相关推荐
Dxy12393102165 分钟前
Python基于BERT的上下文纠错详解
开发语言·python·bert
SiYuanFeng1 小时前
Colab复现 NanoChat:从 Tokenizer(CPU)、Base Train(CPU) 到 SFT(GPU) 的完整踩坑实录
python·colab
炸炸鱼.2 小时前
Python 操作 MySQL 数据库
android·数据库·python·adb
_深海凉_3 小时前
LeetCode热题100-颜色分类
python·算法·leetcode
AC赳赳老秦3 小时前
OpenClaw email技能:批量发送邮件、自动回复,高效处理工作邮件
运维·人工智能·python·django·自动化·deepseek·openclaw
zhaoshuzhaoshu3 小时前
Python 语法之数据结构详细解析
python
AI问答工程师4 小时前
Meta Muse Spark 的"思维压缩"到底是什么?我用 Python 复现了核心思路(附代码)
人工智能·python
zfan5205 小时前
python对Excel数据处理(1)
python·excel·pandas
小饕5 小时前
我从零搭建 RAG 学到的 10 件事
python
老歌老听老掉牙5 小时前
PyQt5+Qt Designer实战:可视化设计智能参数配置界面,告别手动布局时代!
python·qt