云计算百科
云计算领域专业知识百科平台

Python编程——基础知识(时间 Time)

前言

一、时间戳与时间元组

1. 时间戳(Timestamp)

2. 时间元组(struct_time)

二、time 模块及操作

1. 常用函数速览

2. 格式化与解析:strftime 与 strptime

三、calendar 模块:日历与日期计算

四、datetime 模块

五、高级工具

1. pytz:强大的时区处理

2. dateutil:智能解析与重复规则

六、建议

小结


前言

在 Python 编程中,处理日期和时间是常见且重要的任务——无论是记录日志、计算时间差、格式化输出,还是处理时区问题。Python 提供了多个模块来应对这些需求,主要包括 time、calendar 和更现代的 datetime 模块。本文将系统性地介绍这些工具的使用方法、核心概念及最佳实践,助你轻松驾驭时间处理。


一、时间戳与时间元组

1. 时间戳(Timestamp)

  • 自 1970年1月1日 00:00:00 UTC(Unix 纪元) 起经过的秒数。
  • 类型为浮点数,适合进行时间运算。
  • 获取当前时间戳:

import time
ticks = time.time()
print("当前时间戳:", ticks) # 如:1738598245.123456

注意:传统 Unix 时间戳受限于 2038 年问题(32 位系统),但 Python 在 64 位系统上通常无此限制,因此大家当做了解历史就行了,但是时间戳还是很有用的。


2. 时间元组(struct_time)

time 模块使用一个包含 9 个元素的元组(或 struct_time 对象)表示本地或 UTC 时间:

索引属性含义取值范围
0 tm_year 如 2026
1 tm_mon 1–12
2 tm_mday 1–31
3 tm_hour 小时 0–23
4 tm_min 分钟 0–59
5 tm_sec 0–61(含闰秒)
6 tm_wday 星期几(0=周一) 0–6
7 tm_yday 一年中的第几天 1–366
8 tm_isdst 是否夏令时 -1, 0, 1
获取当前本地时间元组:

local_time = time.localtime() # 使用当前时间戳
print(local_time)
# time.struct_time(tm_year=2026, tm_mon=2, tm_mday=3, …)


二、time 模块及操作

1. 常用函数速览

函数功能说明
time.time() 返回当前时间戳
time.localtime([secs]) 将时间戳转为本地时间元组
time.gmtime([secs]) 将时间戳转为 UTC 时间元组
time.mktime(t) 将时间元组转为时间戳
time.asctime([t]) 将时间元组转为可读字符串(如 "Tue Feb 3 21:30:00 2026")
time.ctime([secs]) 等价于 asctime(localtime(secs))
time.sleep(seconds) 暂停程序执行指定秒数

2. 格式化与解析:strftime 与 strptime

  • strftime(format, t):将时间元组格式化为字符串。
  • strptime(string, format):将字符串解析为时间元组。
常用格式符:
符号含义示例
%Y 四位年份 2026
%m 月份(01–12) 02
%d 日期(01–31) 03
%H 24小时制小时(00–23) 21
%M 分钟(00–59) 30
%S 秒(00–59) 45
%a 简写星期名 Tue
%A 全写星期名 Tuesday
%b 简写月份名 Feb
%B 全写月份名 February

import time

# 格式化当前时间
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(now) # 2026-02-03 21:30:45

# 解析字符串为时间元组
date_str = "2026-02-03 21:30:45"
t = time.strptime(date_str, "%Y-%m-%d %H:%M:%S")
timestamp = time.mktime(t)
print(timestamp) # 转回时间戳


三、calendar 模块:日历与日期计算

calendar 模块用于生成日历、判断闰年、计算星期等。

常用功能:

import calendar

# 打印某月日历
print(calendar.month(2026, 2))

# 判断是否为闰年
print(calendar.isleap(2024)) # True

# 计算两个年份间的闰年数量
print(calendar.leapdays(2020, 2030)) # 3(2020, 2024, 2028)

# 获取某月第一天是星期几(0=周一)及天数
first_weekday, days_in_month = calendar.monthrange(2026, 2)
print(first_weekday, days_in_month) # 如:6 28(2026年2月1日是周日,共28天)

# 获取某天是星期几
print(calendar.weekday(2026, 2, 3)) # 1(周二)

注意:默认每周从星期一开始,可通过 calendar.setfirstweekday(calendar.SUNDAY) 这个函数实现个人所需修改。


四、datetime 模块

虽然 time 模块功能强大,但 datetime 模块提供了更面向对象、更直观的 API,是当前 Python 日期时间处理的首选。

核心类:

  • datetime.date:仅日期(年、月、日)
  • datetime.time:仅时间(时、分、秒、微秒)
  • datetime.datetime:日期 + 时间
  • datetime.timedelta:时间间隔(用于加减)
  • datetime.timezone:时区支持(Python 3.2+)

from datetime import datetime, timedelta

# 获取当前日期时间
now = datetime.now()
print(now) # 2026-02-03 21:30:45.123456

# 创建指定日期
dt = datetime(2026, 2, 3, 21, 30, 45)

# 格式化输出
formatted = dt.strftime("%Y-%m-%d %H:%M:%S")
print(formatted) # 2026-02-03 21:30:45

# 解析字符串
parsed = datetime.strptime("2026-02-03 21:30:45", "%Y-%m-%d %H:%M:%S")

# 时间运算
future = now + timedelta(days=7, hours=3)
print(future)

# 日期差
diff = future – now
print(diff.days) # 7

优势:

  • 支持自然的时间运算(如 + timedelta)
  • 更清晰的对象接口
  • 内置时区支持(配合 zoneinfo 或 pytz)

五、高级工具

1. pytz:强大的时区处理

from datetime import datetime
import pytz

utc = pytz.UTC
eastern = pytz.timezone('US/Eastern')

dt = datetime(2026, 2, 3, 21, 30, tzinfo=utc)
eastern_time = dt.astimezone(eastern)

注意:Python 3.9+ 以及之后的都推荐使用标准库 zoneinfo 替代 pytz。

2. dateutil:智能解析与重复规则

from dateutil.parser import parse
from dateutil.relativedelta import relativedelta

# 智能解析各种日期字符串
dt = parse("Feb 3, 2026 at 9:30 PM")

# 相对时间(如“下个月”、“3年后”)
next_month = dt + relativedelta(months=1)


六、建议

  • 优先使用 datetime 而非 time:代码更清晰、功能更强大。
  • 存储时间用 UTC:避免时区混乱,显示时再转换为本地时间。
  • 避免硬编码时间格式:使用常量或配置管理格式字符串。
  • 处理用户输入时用 dateutil.parser:兼容多种格式。
  • 慎用 time.sleep() 进行定时任务:考虑使用 sched 或外部调度器。

  • 小结

    Python 提供了从底层 time 模块到高层 datetime 的完整时间处理体系。对于新项目,强烈推荐使用 datetime 模块,它不仅语法简洁,还支持现代开发所需的时区、运算和格式化功能。而 calendar 模块则在需要日历逻辑时大显身手。

    “时间是程序中最容易出错的部分之一 —— 用对工具,事半功倍。”

    掌握这些模块,你将能从容应对任何与日期时间相关的编程挑战!

    希望大家都能够有所收获,大家的点赞和关注是对我最大的支持和帮助!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Python编程——基础知识(时间 Time)
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!