Python怎么从日期中提取年、月、日和星期

小鹿同学
小鹿同学
发布时间:2026-10-10| 2人浏览过
原创
在 Python 中,提取日期的年、月、日和星期最直接且推荐的方法是使用内置的 datetime 模块。如果已有日期对象,可直接访问 .year、.month、.day 属性获取整型数值,并通过 .weekday() 或 .isoweekday() 方法计算星期几;若处理的是日期文本,只需先使用 strptime() 解析为日期对象即可顺利提取。
Python怎么从日期中提取年、月、日和星期
图 1:Python 核心日期要素提取概览

一、操作准备:获取或构造日期对象

在 Python 中开展提取前,必须确保手头的数据是 datetime.date 或 datetime.datetime 对象。日常开发中通常面临两种输入形态:获取当前系统运行时刻,或将外部传入的字符串转换为日期对象。

1. 获取当前日期对象

通过内置模块即可直接获得当前日期实例:

from datetime import date, datetime

# 获取当前纯日期对象 (date 类型)
today_date = date.today()

# 获取当前带时间的完整对象 (datetime 类型)
now_time = datetime.now()

print("当前日期对象:", today_date)
print("当前时间对象:", now_time)

示例输出:

当前日期对象: 2026-10-09
当前时间对象: 2026-10-09 09:56:00.123456

2. 将日期字符串解析为日期对象

如果输入的日期是文本格式(如 "2026-10-09"),必须先借助 datetime.strptime() 函数指定格式解析:

from datetime import datetime

date_string = "2026-10-09"
# 使用 %Y 匹配四位年份,%m 匹配月份,%d 匹配日期
date_obj = datetime.strptime(date_string, "%Y-%m-%d")

print("解析后的对象类型:", type(date_obj))

示例输出:

解析后的对象类型: <class 'datetime.datetime'>
Python怎么从日期中提取年、月、日和星期
图 2:从输入到提取结果的标准四步流水线

二、提取年、月、日:最直接的属性访问法

在 datetime.date 或 datetime.datetime 对象中,年、月、日已经被解析并作为对象属性保存。读取它们不需要调用方法,直接访问属性名称即可。

1. 属性访问代码示例

from datetime import datetime

# 构造一个指定的日期时间对象
target_date = datetime(2026, 10, 9, 15, 30, 0)

# 直接读取对象属性
current_year = target_date.year
current_month = target_date.month
current_day = target_date.day

print(f"提取的年份: {current_year} (类型: {type(current_year).__name__})")
print(f"提取的月份: {current_month} (类型: {type(current_month).__name__})")
print(f"提取的日期: {current_day} (类型: {type(current_day).__name__})")

示例输出:

提取的年份: 2026 (类型: int)
提取的月份: 10 (类型: int)
提取的日期: 9 (类型: int)
要点提示: .year、.month、.day 是只读属性(attribute),返回纯整数(int),不要在属性后面添加小括号。如果写成 target_date.year(),Python 会抛出 TypeError: 'int' object is not callable 错误。
Python怎么从日期中提取年、月、日和星期
图 3:datetime 对象内部结构与属性/方法功能划分

三、提取星期的多种方案与核心差异

与年月日不同,星期不是简单的存储数字,而是根据公历算法动态推导得出的。Python 提供了多种获取星期的机制,适用于不同的业务场景。

1. 方式一:weekday() 方法(周一为0,周日为6)

这是 Python 的传统惯用方法,其返回值遵循 0 索引规范:

  • 0 代表星期一
  • 1 代表星期二
  • ……
  • 6 代表星期日
from datetime import date

# 2026年10月9日是星期五
sample_date = date(2026, 10, 9)
weekday_num = sample_date.weekday()

print(f"sample_date.weekday() 返回值: {weekday_num}")

示例输出:

sample_date.weekday() 返回值: 4

2. 方式二:isoweekday() 方法(周一为1,周日为7)

遵循国际标准 ISO 8601,返回值符合日常认知习惯:

  • 1 代表星期一
  • 2 代表星期二
  • ……
  • 7 代表星期日
iso_weekday_num = sample_date.isoweekday()
print(f"sample_date.isoweekday() 返回值: {iso_weekday_num}")

示例输出:

sample_date.isoweekday() 返回值: 5

3. 方式三:映射提取中文星期(最实用的工程写法)

因为 weekday() 返回 0 到 6,刚好与 Python 列表索引完全对应,所以可以通过预设中文列表实现极简映射:

chinese_weekdays = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"]

# 使用 weekday() 作为下标快速索引
chinese_weekday_name = chinese_weekdays[sample_date.weekday()]

print(f"中文星期表示: {chinese_weekday_name}")

示例输出:

中文星期表示: 星期五

4. 方式四:使用 strftime() 格式化指令

如果需要直接生成包含星期的格式化文本,可以使用 strftime:

# %A: 英文星期完整全称 (Friday)
# %a: 英文星期缩写 (Fri)
# %w: 十进制数字 0-6 (0 代表星期日,不同于 weekday!)
print("英文星期全称:", sample_date.strftime("%A"))
print("英文星期缩写:", sample_date.strftime("%a"))
print("格式化代码 %w:", sample_date.strftime("%w"))

示例输出:

英文星期全称: Friday
英文星期缩写: Fri
格式化代码 %w: 5
Python怎么从日期中提取年、月、日和星期
图 4:星期提取各主流接口规则与场景对照表

四、避坑指南:实际开发中的三个典型注意事项

1. 混淆 weekday() 与 strftime('%w') 的星期天定义

很多开发者容易在星期天的数值上踩坑:

  • 在 weekday() 中,周日是 6。
  • 在 isoweekday() 中,周日是 7。
  • 在 strftime('%w') 中,周日是 0(周一为1)。

如果编写根据数字判断是否为周末的逻辑,务必明确所使用接口的具体定义。

2. 前导零补齐问题

.month 和 .day 属性返回的是整数,例如 5 月 8 日会返回 5 和 8。在很多业务场景(如生成文件名、数据库查询参数)中需要固定两位数形式(05、08)。这时推荐使用 Python 的 f-string 格式化语法:

from datetime import date

d = date(2026, 5, 8)

# 方式一:使用整数格式化占位符 (:02d)
month_str = f"{d.month:02d}"
day_str = f"{d.day:02d}"

print(f"两位数格式化: {d.year}-{month_str}-{day_str}")

# 方式二:直接在 f-string 中嵌入 strftime 格式控制
print(f"快捷格式化: {d:%Y-%m-%d}")

示例输出:

两位数格式化: 2026-05-08
快捷格式化: 2026-05-08

3. 从时间戳中快速提取

如果数据源是时间戳(如后台接口返回的 1760000000),只需先用 fromtimestamp() 转换即可使用相同的一整套提取手段:

import time
from datetime import datetime

ts = time.time()
dt = datetime.fromtimestamp(ts)

print(f"时间戳提取年: {dt.year}, 月: {dt.month}, 日: {dt.day}, 星期索引: {dt.weekday()}")
Python怎么从日期中提取年、月、日和星期
图 5:输入形态与业务目标选型决策全景图

五、核心结论与总结

总结来说,从 Python 日期中提取年、月、日和星期的核心技巧十分纯粹:

  1. 年、月、日提取:直接访问 dt.year、dt.month、dt.day,获取只读整型值,切勿加小括号调用。
  2. 星期提取:
    • 若需要作为列表下标进行查表(如转为中文“星期几”),使用 dt.weekday()(0 ~ 6,周一为0)。
    • 若需要符合日常直觉或国际规范(1 ~ 7,周一为1),使用 dt.isoweekday()。
    • 若需要格式化为英文星期字符串,使用 dt.strftime("%A")。
  3. 输入对齐:对于非日期对象(如字符串或时间戳),先通过 strptime 或 fromtimestamp 完成前置标准化,即可通用上述所有提取逻辑。
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。