python 的 datetime
模块是处理日期和时间的核心库,提供了丰富的类和方法来操作日期、时间、时间间隔和时区。以下是对该模块的详细介绍:
主要类
datetime.date
处理日期(年、月、日)。- 属性:
year
,month
,day
- 常用方法:
date.today()
: 返回当前本地日期。date.fromisoformat("yyyy-mm-dd")
: 从字符串解析日期。date.replace(year, month, day)
: 替换日期部分。date.weekday()
: 返回星期几(0=周一, 6=周日)。date.strftime(format)
: 格式化日期为字符串。
- 属性:
datetime.time
处理时间(时、分、秒、微秒)。- 属性:
hour
,minute
,second
,microsecond
,tzinfo
(时区) - 常用方法:
time.replace(hour, minute, second, microsecond)
: 替换时间部分。time.strftime(format)
: 格式化时间为字符串。
- 属性:
datetime.datetime
处理日期和时间的组合(最常用)。- 属性:
year
,month
,day
,hour
,minute
,second
,microsecond
,tzinfo
- 常用方法:
datetime.now(tz=none)
: 返回当前本地日期时间。datetime.utcnow()
: 返回当前 utc 时间。datetime.combine(date, time)
: 合并日期和时间对象。datetime.strptime(string, format)
: 解析字符串为日期时间。datetime.timestamp()
: 转换为 unix 时间戳(秒)。datetime.date()
: 提取日期部分。datetime.time()
: 提取时间部分。datetime.strftime(format)
: 格式化输出。
- 属性:
datetime.timedelta
表示时间间隔(如天、秒、微秒)。- 用途: 计算日期/时间的加减。
- 示例:
future = datetime.now() + timedelta(days=7) # 7天后
datetime.tzinfo
(抽象类)
处理时区信息,需自定义实现。
替代方案: 使用标准库datetime.timezone
(python 3.2+)或第三方库pytz
。datetime.timezone
实现tzinfo
的简单时区类。
- 示例:
tz = timezone(timedelta(hours=8)) # utc+8 时区 dt = datetime(2023, 5, 15, tzinfo=tz)
关键操作示例
1. 获取当前时间
from datetime import datetime now = datetime.now() # 2023-05-15 14:30:45.123456
2. 时间格式化与解析
# 日期时间 → 字符串 s = now.strftime("%y-%m-%d %h:%m:%s") # "2023-05-15 14:30:45" # 字符串 → 日期时间 dt = datetime.strptime("2023-05-15", "%y-%m-%d") # 时间部分默认为 00:00:00
3. 时间计算
from datetime import timedelta # 加减时间 tomorrow = now + timedelta(days=1) last_hour = now - timedelta(hours=1) # 计算时间差 diff = tomorrow - now print(diff.total_seconds()) # 86400.0 秒
4. 时区处理
from datetime import timezone, timedelta # 创建 utc+8 时区 tz_beijing = timezone(timedelta(hours=8)) dt_local = datetime(2023, 5, 15, 14, 30, tzinfo=tz_beijing) # 转换为 utc 时间 dt_utc = dt_local.astimezone(timezone.utc) # 2023-05-15 06:30:00+00:00
5. 获取日期/时间部分
date_part = now.date() # 返回 date 对象 time_part = now.time() # 返回 time 对象 year = now.year # 2023
格式化符号表
符号 | 含义 | 示例 |
---|---|---|
%y | 四位年份 | 2023 |
%m | 两位月份(01-12) | 05 |
%d | 两位日期(01-31) | 15 |
%h | 24小时制小时(00-23) | 14 |
%m | 分钟(00-59) | 30 |
%s | 秒(00-59) | 45 |
%f | 微秒(000000-999999) | 123456 |
%a | 星期全名 | monday |
%a | 星期缩写 | mon |
%b | 月份全名 | may |
%b | 月份缩写 | may |
最佳实践
- 处理时区:
优先使用timezone
或第三方库pytz
(支持 iana 时区数据库)。 - 时间存储:
建议用 utc 时间存储,显示时再转换为本地时间。 - 性能敏感场景:
考虑使用time.monotonic()
或time.perf_counter()
替代时间差计算。
完整示例
from datetime import datetime, timedelta, timezone # 1. 获取当前时间(带时区) now = datetime.now(timezone.utc) # 2. 转换为北京时间 (utc+8) tz_beijing = timezone(timedelta(hours=8)) beijing_time = now.astimezone(tz_beijing) # 3. 格式化输出 formatted = beijing_time.strftime("%y-%m-%d %h:%m:%s %z") print(f"beijing time: {formatted}") # e.g., "2023-05-15 22:30:45 utc+08:00" # 4. 计算7天后的日期 future = beijing_time + timedelta(days=7) # 5. 解析字符串时间 dt_parsed = datetime.strptime("2023-12-31", "%y-%m-%d")
通过掌握 datetime
模块,你可以高效处理绝大多数日期时间相关任务!
到此这篇关于python datetime模块详解的文章就介绍到这了,更多相关python datetime模块内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论