时间
在编程世界中,时间是一个看似简单却极易出错的领域。从简单的“现在几点了”到复杂的跨时区调度,Python 提供了强大的工具来帮助我们驾驭时间。
常用模块
Python 中有几个常用的与时间相关的库,它们各有侧重:
- time:最基础的模块,主要处理时间戳(Timestamp)和与底层系统时间相关的操作。
- datetime:最常用的模块,提供了日期(date)、时间(time)、日期时间(datetime)和时间间隔(timedelta)等对象,接口更加面向对象,易于使用。
- calendar:专门处理日历相关操作,比如打印月历、判断闰年等。
- zoneinfo(Python 3.9+)/ pytz:用于处理复杂的时区问题。
zoneinfo是 Python 3.9 加入标准库的现代方案,而pytz是老牌的第三方库。 - dateutil:这是一个强大的第三方库(需要
pip install python-dateutil),它可以解析各种稀奇古怪的时间字符串,并支持相对时间的计算(如“下个月的今天”)。
获取当前时间
这是最常用的操作。在前文中,我们使用 time 模块的方法来测量函数运行消耗的时间。但如果我们需要处理具体的年月日,datetime 会更方便。
使用 time 模块
time 模块主要关注“时间戳”。时间戳是指格林威治时间 1970 年 01 月 01 日 00 时 00 分 00 秒(北京时间 08:00:00)起至现在的总秒数。
import time
current_timestamp = time.time() # 获取当前时间的时间戳(浮点数)
local_time_struct = time.localtime() # 获取本地时间(返回一个 struct_time 对象)
formatted_time = time.strftime('%Y-%m-%d %H:%M:%S', local_time_struct) # 格式化
print(f"时间戳: {current_timestamp}")
print(f"本地时间: {formatted_time}")
使用 datetime 模块
datetime 模块更加直观,它返回的是对象,我们可以直接访问对象的 .year、.month 等属性。
from datetime import datetime
now = datetime.now() # 获取当前的 datetime 对象
print(f"当前时间: {now}")
print(f"今天是: {now.year}年{now.month}月{now.day}日")