全面掌握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} 天")
相关推荐
思则变1 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络2 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find3 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取4 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector6 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习6 小时前
Python入门Day2
开发语言·python
Vertira6 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉6 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗6 小时前
黑马python(二十四)
开发语言·python
晓13137 小时前
OpenCV篇——项目(二)OCR文档扫描
人工智能·python·opencv·pycharm·ocr