杰瑞科技汇

Python中datetime类型如何使用?

  1. datetime: 最常用、最全面的模块,包含 date, time, datetime, timedelta, tzinfo 等类。
  2. time: 主要处理时间,不涉及日期。
  3. calendar: 处理日历相关的功能,比如生成月历、判断是否为闰年等。

下面我们将重点介绍 datetime 模块,因为它在日常开发中使用最频繁。

Python中datetime类型如何使用?-图1
(图片来源网络,侵删)

datetime 模块的核心类

datetime.date

表示一个日期,包含年、月、日。

  • 创建date(year, month, day)
  • 获取当前日期date.today()
from datetime import date
# 创建一个特定的日期
d = date(2025, 10, 26)
print(d)  # 输出: 2025-10-26
# 获取当前日期
today = date.today()
print(f"今天是: {today}") # 输出: 今天是: 2025-10-26 (示例)
# 访问年、月、日
print(f"年份: {d.year}")  # 输出: 年份: 2025
print(f"月份: {d.month}") # 输出: 月份: 10
print(f"日期: {d.day}")   # 输出: 日期: 26

datetime.time

表示一个时间,包含时、分、秒、微秒。

  • 创建time(hour, minute, second, microsecond)
from datetime import time
# 创建一个特定的时间
t = time(14, 30, 0, 500000) # 14点30分0秒500毫秒
print(t)  # 输出: 14:30:00.500000
# 访问时、分、秒等
print(f"小时: {t.hour}")   # 输出: 小时: 14
print(f"分钟: {t.minute}") # 输出: 分钟: 30
print(f"秒: {t.second}")   # 输出: 秒: 0

datetime.datetime

这是最常用的类,它结合了 datetime 的功能,表示一个具体的日期和时间点。

  • 创建datetime(year, month, day, hour, minute, second, microsecond)
  • 获取当前日期和时间datetime.now()
  • 获取当前UTC日期和时间datetime.utcnow()
from datetime import datetime
# 创建一个特定的日期和时间
dt = datetime(2025, 10, 26, 10, 30, 0)
print(dt)  # 输出: 2025-10-26 10:30:00
# 获取当前的日期和时间
now = datetime.now()
print(f"现在是: {now}") # 输出: 现在是: 2025-10-26 15:45:12.345678 (示例)
# 访问各个组成部分
print(f"年: {now.year}")
print(f"月: {now.month}")
print(f"日: {now.day}")
print(f"时: {now.hour}")
print(f"分: {now.minute}")

字符串与 datetime 对象的相互转换

这是非常常见的操作,比如从数据库或文件中读取日期字符串,或者需要将日期格式化显示给用户。

Python中datetime类型如何使用?-图2
(图片来源网络,侵删)

datetime 对象 -> 字符串 (格式化)

使用 strftime() 方法 (string format time)。

from datetime import datetime
now = datetime.now()
# 格式化为 "YYYY-MM-DD HH:MM:SS"
str_format1 = now.strftime("%Y-%m-%d %H:%M:%S")
print(str_format1) # 输出: 2025-10-26 15:45:12
# 格式化为 "YYYY年MM月DD日"
str_format2 = now.strftime("%Y年%m月%d日")
print(str_format2) # 输出: 2025年10月26日
# 格式化为 "星期X, HH:MM"
str_format3 = now.strftime("%A, %H:%M") # %A是星期几的全名
print(str_format3) # 输出: Thursday, 15:45 (取决于当前是周几)

常用格式化代码:

  • %Y: 四位数的年份 (e.g., 2025)
  • %m: 两位数的月份 (01-12)
  • %d: 两位数的日 (01-31)
  • %H: 24小时制的小时 (00-23)
  • %I: 12小时制的小时 (01-12)
  • %M: 两位数的分钟 (00-59)
  • %S: 两位数的秒 (00-59)
  • %A: 星期几的全名 (e.g., Monday)
  • %a: 星期几的缩写 (e.g., Mon)
  • %f: 微秒 (6位数字)

字符串 -> datetime 对象 (解析)

使用 strptime() 方法 (string parse time)。

from datetime import datetime
date_string = "2025-10-26 15:45:12"
# 将字符串解析为 datetime 对象
dt_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(dt_object)      # 输出: 2025-10-26 15:45:12
print(type(dt_object)) # 输出: <class 'datetime.datetime'>
# 注意:格式化代码必须与字符串格式完全匹配
# 错误示例: dt_object = datetime.strptime("26/10/2025", "%Y-%m-%d") # 会报 ValueError

时间差与计算 (timedelta)

timedelta 用于表示两个日期或时间之间的差值,或者用于进行日期的加减运算。

Python中datetime类型如何使用?-图3
(图片来源网络,侵删)
  • 创建timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
from datetime import datetime, timedelta
now = datetime.now()
# 创建一个时间差 (3天4小时)
delta = timedelta(days=3, hours=4)
# 计算未来的某个时间
future_time = now + delta
print(f"3天4小时后是: {future_time}")
# 计算过去的某个时间
past_time = now - delta
print(f"3天4小时前是: {past_time}")
# 计算两个日期之间的差值
date1 = datetime(2025, 1, 1)
date2 = datetime(2025, 10, 26)
difference = date2 - date1
print(f"从 {date1} 到 {date2} 相差: {difference}")
print(f"相差的天数: {difference.days}") # 输出相差的天数
print(f"相差的秒数: {difference.seconds}") # 输出剩余的秒数 (不含天数部分的秒数)

时区处理 (timezone)

处理不同时区的日期时间是现代应用中非常重要的一环,Python 3.2+ 引入了 datetime.timezone 来处理时区。

from datetime import datetime, timezone, timedelta
# 获取当前带时区的 datetime
# 使用 UTC+8 时区 (例如北京时间)
tz_utc_8 = timezone(timedelta(hours=8))
now_with_tz = datetime.now(tz_utc_8)
print(f"北京时间: {now_with_tz}") # 输出: 2025-10-26 23:45:12+08:00
# 使用 UTC 时区
now_utc = datetime.now(timezone.utc)
print(f"UTC时间: {now_utc}") # 输出: 2025-10-26 15:45:12+00:00
# 时区转换 (从一个时区转换到另一个时区)
# 假设我们有一个 UTC 时间
utc_time = datetime(2025, 10, 26, 15, 0, 0, tzinfo=timezone.utc)
# 转换为 UTC+8 时间
beijing_time = utc_time.astimezone(timezone(timedelta(hours=8)))
print(f"UTC时间 {utc_time} 对应的北京时间是: {beijing_time}")

注意:虽然 datetime.timezone 可以处理固定偏移的时区,但对于更复杂的时区(例如夏令时),建议使用第三方库 pytz,它是 Python 时区处理的事实标准。


常用操作总结

功能 方法/函数 示例
创建 datetime 对象 datetime() dt = datetime(2025, 10, 26, 10, 30)
获取当前时间 datetime.now() now = datetime.now()
获取当前UTC时间 datetime.utcnow() now_utc = datetime.utcnow()
格式化成字符串 strftime() now.strftime("%Y-%m-%d")
从字符串解析 strptime() dt = datetime.strptime("2025-10-26", "%Y-%m-%d")
时间加减 timedelta future = now + timedelta(days=7)
计算时间差 delta = date2 - date1
访问年月日时分秒 .year, .month, ... now.year
替换某个部分 replace() new_dt = now.replace(hour=0, minute=0)

小练习

假设你有一个订单创建时间字符串 "2025-10-26T10:30:00Z" (Z代表UTC时间),请计算这个订单是否已经超过了24小时。

from datetime import datetime, timedelta, timezone
order_time_str = "2025-10-26T10:30:00Z"
# 1. 解析字符串为 datetime 对象
# 注意字符串中的 'T' 和 'Z',以及时区信息
# %Y-%m-%dT%H:%M:%S 是格式
# %z 是时区偏移量,Z 代表 UTC+00:00
order_time = datetime.strptime(order_time_str, "%Y-%m-%dT%H:%M:%S%z")
print(f"订单创建时间: {order_time}")
# 2. 获取当前的 UTC 时间
now_utc = datetime.now(timezone.utc)
print(f"当前 UTC 时间: {now_utc}")
# 3. 计算时间差
time_difference = now_utc - order_time
print(f"时间差: {time_difference}")
# 4. 判断是否超过 24 小时
if time_difference > timedelta(hours=24):
    print("订单已超过24小时。")
else:
    print("订单未超过24小时。")

希望这个详细的讲解能帮助你完全掌握 Python 中的 datetime 类型!

分享:
扫描分享到社交APP
上一篇
下一篇