杰瑞科技汇

python datetime 设置

核心类

datetime 模块主要包含以下几个类,了解它们的区别是关键:

python datetime 设置-图1
(图片来源网络,侵删)
类名 描述 示例
date 只包含日期(年、月、日),不包含时间。 2025-10-27
time 只包含时间(时、分、秒、微秒),不包含日期。 14:30:00
datetime 同时包含日期和时间,是 datetime 的结合体。 2025-10-27 14:30:00
timedelta 表示两个 datedatetime 对象之间的时间差(时间段)。 1 day, 2:30:00
tzinfo 时区信息的抽象基类,用于处理时区问题。 UTC, CST

获取当前时间

这是最常见的操作。

获取当前本地时间(datetime 对象)

from datetime import datetime
# 获取当前的本地日期和时间
now = datetime.now()
print(f"当前本地时间: {now}")
print(f"类型: {type(now)}")
# 输出可能类似于:
# 当前本地时间: 2025-10-27 15:30:45.123456
# 类型: <class 'datetime.datetime'>

获取当前UTC时间(datetime 对象)

from datetime import datetime
# 获取当前的UTC(协调世界时)日期和时间
utc_now = datetime.utcnow()
print(f"当前UTC时间: {utc_now}")

获取当前日期(date 对象)

如果你只需要日期部分,可以这样做:

from datetime import datetime, date
# 方法1: 从 datetime 对象中提取
now = datetime.now()
today = now.date()
print(f"当前日期: {today}")
print(f"类型: {type(today)}")
# 方法2: 直接使用 date 类
today_direct = date.today()
print(f"当前日期 (直接): {today_direct}")

创建自定义的 datetime 对象

你可以通过构造函数创建一个特定的日期和时间。

from datetime import datetime
# 创建一个特定的 datetime 对象
# 格式: datetime(年, 月, 日, 时, 分, 秒, 微秒)
dt_custom = datetime(2025, 10, 27, 10, 30, 0)
print(f"自定义时间: {dt_custom}")
# 也可以只提供日期部分,时间部分会默认为 00:00:00
dt_custom_date = datetime(2025, 10, 27)
print(f"仅自定义日期: {dt_custom_date}")

格式化输出(strftime

datetime 对象转换为字符串。strftime 的意思是 "string format time"。

常用的格式化代码:

  • %Y: 4位年份 (e.g., 2025)
  • %m: 2位月份 (01-12)
  • %d: 2位日期 (01-31)
  • %H: 24小时制的小时 (00-23)
  • %I: 12小时制的小时 (01-12)
  • %M: 分钟 (00-59)
  • %S: 秒 (00-59)
  • %f: 微秒 (6位数字)
  • %A: 星期几的全称 (e.g., Friday)
  • %a: 星期几的简称 (e.g., Fri)
  • %B: 月份的全称 (e.g., October)
  • %b: 月份的简称 (e.g., Oct)
from datetime import datetime
now = datetime.now()
# 示例1: 标准格式
str_standard = now.strftime("%Y-%m-%d %H:%M:%S")
print(f"标准格式: {str_standard}") # 输出: 2025-10-27 15:30:45
# 示例2: 自定义格式
str_custom = now.strftime("%Y年%m月%d日 %A %H时%M分%S秒")
print(f"自定义格式: {str_custom}") # 输出: 2025年10月27日 Friday 15时30分45秒
# 示例3: 仅日期
str_date = now.strftime("%Y/%m/%d")
print(f"仅日期: {str_date}") # 输出: 2025/10/27

解析字符串为 datetime 对象(strptime

将符合特定格式的字符串转换回 datetime 对象。strptime 的意思是 "string parse time"。

from datetime import datetime
# 字符串日期
date_string = "2025-10-27 15:30:00"
# 使用 strptime 解析,格式必须与字符串完全匹配
dt_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(f"解析后的对象: {dt_object}")
print(f"类型: {type(dt_object)}")
# 其他格式的示例
date_string_2 = "27-Oct-2025"
dt_object_2 = datetime.strptime(date_string_2, "%d-%b-%Y")
print(f"解析后的对象 (格式2): {dt_object_2}")

日期和时间的计算(timedelta

使用 timedelta 可以对 datetimedate 对象进行加减运算。

from datetime import datetime, timedelta
now = datetime.now()
# 计算 3 天后的时间
future_time = now + timedelta(days=3)
print(f"3天后: {future_time}")
# 计算 2 小时 30 分钟前的时间
past_time = now - timedelta(hours=2, minutes=30)
print(f"2小时30分前: {past_time}")
# 计算 10 天和 5 秒后的时间
delta = timedelta(days=10, seconds=5)
future_time_2 = now + delta
print(f"10天5秒后: {future_time_2}")

时区处理(重要)

在 Python 3.9 之前,时区处理主要使用第三方库 pytz,从 Python 3.9 开始,标准库 zoneinfo 成为了官方推荐。

使用 zoneinfo (Python 3.9+)

# 首先确保你的 Python 版本是 3.9 或更高
from datetime import datetime
from zoneinfo import ZoneInfo
# 1. 创建一个有时区的 datetime 对象
# 东京时间
tokyo_time = datetime.now(ZoneInfo("Asia/Tokyo"))
print(f"东京时间: {tokyo_time}")
# 纽约时间
new_york_time = datetime.now(ZoneInfo("America/New_York"))
print(f"纽约时间: {new_york_time}")
# 2. 给一个无时区的 datetime 对象加上时区
naive_dt = datetime(2025, 10, 27, 12, 0)
aware_dt = naive_dt.replace(tzinfo=ZoneInfo("UTC"))
print(f"UTC时间: {aware_dt}")
# 3. 时区转换
# 将东京时间转换为纽约时间
tokyo_dt = datetime(2025, 10, 27, 15, 0, tzinfo=ZoneInfo("Asia/Tokyo"))
new_york_dt = tokyo_dt.astimezone(ZoneInfo("America/New_York"))
print(f"东京时间 15:00 对应的纽约时间: {new_york_dt}")

如果你使用的是 Python 3.9 以下版本,你需要安装并使用 pytzpip install pytz


常用操作总结

任务 代码示例
获取当前时间 from datetime import datetime; now = datetime.now()
获取当前日期 from datetime import date; today = date.today()
创建特定时间 dt = datetime(2025, 10, 27, 10, 30)
格式化输出 dt_str = dt.strftime("%Y-%m-%d %H:%M")
解析字符串 dt = datetime.strptime("2025-10-27", "%Y-%m-%d")
时间加减 future_dt = now + timedelta(days=7)
获取星期几 weekday = now.weekday() (0=周一, 6=周日) 或 isoweekday = now.isoweekday() (1=周一, 7=周日)
获取年/月/日/时/分/秒 year = now.year, month = now.month, hour = now.hour

希望这份详细的指南能帮助你熟练掌握 Python 的 datetime 设置和使用!

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