全面掌握Python时间处理
flyfish
datetime
: 最适合处理日期和时间,支持创建时间对象、格式化时间、计算时间差等。time
: 提供了获取时间戳、将时间戳转换为本地时间、暂停程序执行等功能。timeit
: 主要用于性能测试,帮助开发者了解某段代码的执行效率。
基础知识
在编程中,"时间"通常有两种主要形式:
- 时间点(Time Point):指某一特定时刻,如"2025年2月19日 11时17分"。
- 时间段(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} 天")