杰瑞科技汇

Python中如何用datetime获取当前星期?

datetime 模块是 Python 标准库中处理日期和时间的核心工具,对于星期的处理,它主要依赖于两个部分:

Python中如何用datetime获取当前星期?-图1
(图片来源网络,侵删)
  1. date 对象:只包含日期(年、月、日)。
  2. datetime 对象:包含日期和时间(年、月、日、时、分、秒、微秒)。

这两种对象都有与星期相关的方法和属性。


核心概念:星期几的表示方式

datetime 中,星期几有两种表示方法,理解它们的区别很重要:

  1. 星期几的序号 (weekday()isoweekday())

    • 这是一个整数,用来表示一周中的第几天。
    • date.weekday(): 返回一个整数,0 代表星期一,1 代表星期二,... 6 代表星期日,这是 Python 内部常用的表示法,遵循 ISO 标准(星期一是每周的第一天)。
    • date.isoweekday(): 返回一个整数,1 代表星期一,2 代表星期二,... 7 代表星期日,这更符合人们的日常认知。
  2. 星期的英文缩写 (%w)

    Python中如何用datetime获取当前星期?-图2
    (图片来源网络,侵删)
    • 这是一个格式化代码,通常用在 strftime 方法中。
    • %w: 返回一个整数,0 代表星期日,1 代表星期一,... 6 代表星期六,注意,这里 0 是星期日,与 weekday() 不同。

常用操作示例

下面我们通过代码示例来演示最常见的操作。

获取一个日期是星期几

import datetime
# 创建一个 date 对象
d = datetime.date(2025, 10, 27) # 2025年10月27日
# --- 方法一:获取星期几的序号 ---
# 使用 weekday(),返回 0-6 (0=周一, 6=周日)
weekday_num = d.weekday()
print(f"使用 weekday() 获取的星期序号: {weekday_num}") # 输出: 4 (代表星期五)
# 使用 isoweekday(),返回 1-7 (1=周一, 7=周日)
isoweekday_num = d.isoweekday()
print(f"使用 isoweekday() 获取的星期序号: {isoweekday_num}") # 输出: 5 (代表星期五)
# --- 方法二:获取星期的英文全名或缩写 ---
# 使用 strftime() 格式化日期
# %A: 星期几的完整名称 (Monday, Tuesday, ...)
# %a: 星期几的缩写 (Mon, Tue, ...)
weekday_full_name = d.strftime("%A")
weekday_abbr = d.strftime("%a")
print(f"星期的完整名称: {weekday_full_name}") # 输出: Friday
print(f"星期的缩写: {weekday_abbr}")         # 输出: Fri

根据星期几获取日期

这是一个非常常见的需求,找出下一个周五是哪一天”。

import datetime
def get_next_weekday(start_date, target_weekday):
    """
    获取从某个日期开始的下一个指定星期几的日期。
    :param start_date: datetime.date 对象
    :param target_weekday: 目标星期几的序号 (0=周一, 6=周日)
    :return: 下一个目标星期几的 datetime.date 对象
    """
    # 计算当前日期的星期几与目标星期几的天数差
    # (target_weekday - start_date.weekday()) % 7
    # 如果结果是0,说明就是今天
    # 如果结果是正数,就是未来几天
    # 如果结果是负数,(比如今天是周五(4),目标是周一(0)),会自动换算成3天后
    days_ahead = (target_weekday - start_date.weekday() + 7) % 7
    if days_ahead == 0: # 如果目标就是今天,默认返回下一个
        days_ahead = 7
    return start_date + datetime.timedelta(days=days_ahead)
# 示例:今天是 2025-10-26 (星期四)
today = datetime.date(2025, 10, 26)
# 找出下一个星期一 (weekday=0)
next_monday = get_next_weekday(today, 0)
print(f"下一个星期一是: {next_monday}") # 输出: 2025-10-30
# 找出下一个星期五 (weekday=4)
next_friday = get_next_weekday(today, 4)
print(f"下一个星期五是: {next_friday}") # 输出: 2025-10-27
# 找出下一个星期日 (weekday=6)
next_sunday = get_next_weekday(today, 6)
print(f"下一个星期日是: {next_sunday}") # 输出: 2025-10-29

获取当前日期是本年第几周

ISO 周计数系统是一种国际通用的周计数方式,它将星期一作为每周的第一天。

import datetime
# 创建一个 date 对象
d = datetime.date(2025, 1, 1) # 2025年1月1日是星期日
# 使用 isocalendar() 方法,返回一个元组 (ISO year, ISO week number, ISO weekday)
iso_year, iso_week, iso_weekday = d.isocalendar()
print(f"日期 {d} 的ISO信息:")
print(f"  ISO年份: {iso_year}")
print(f"  ISO周数: {iso_week}") # 2025年1月1日属于第52周(2025年的最后一周)
print(f"  ISO星期几: {iso_weekday}") # 7 (代表星期日)
d2 = datetime.date(2025, 10, 27) # 2025年10月27日
iso_year2, iso_week2, _ = d2.isocalendar()
print(f"\n日期 {d2} 是本年第 {iso_week2} 周。") # 输出: 43

datetime 对象与 date 对象

datetime 对象包含了所有 date 对象的方法,因为它本身就是一个更具体的日期。

Python中如何用datetime获取当前星期?-图3
(图片来源网络,侵删)
import datetime
# 创建一个 datetime 对象
dt = datetime.datetime(2025, 10, 27, 10, 30, 0) # 2025年10月27日 10:30:00
# 获取星期几的方法和 date 对象完全一样
print(f"datetime 对象的星期几 (weekday): {dt.weekday()}") # 输出: 4
print(f"datetime 对象的星期几 (isoweekday): {dt.isoweekday()}") # 输出: 5
print(f"datetime 对象的星期名称: {dt.strftime('%A')}") # 输出: Friday

总结表格

方法/属性 返回值 说明
date.weekday() int (0-6) 0=周一, 1=周二, ..., 6=周日,Python 内部常用。
date.isoweekday() int (1-7) 1=周一, 2=周二, ..., 7=周日,更符合日常习惯。
strftime("%A") str 星期几的完整名称 (e.g., "Monday", "星期五")。
strftime("%a") str 星期几的缩写 (e.g., "Mon", "周五")。
strftime("%w") str 星期几的数字,0=周日, 1=周一, ..., 6=周六
date.isocalendar() tuple 返回 (ISO年份, ISO周数, ISO星期几),ISO周数是国际标准。

实用技巧:将星期名称映射到数字

如果你想根据用户输入的星期名称(如 "Monday")来获取数字,可以使用一个字典。

import datetime
weekday_name_to_num = {
    "Monday": 0, "Mon": 0,
    "Tuesday": 1, "Tue": 1,
    "Wednesday": 2, "Wed": 2,
    "Thursday": 3, "Thu": 3,
    "Friday": 4, "Fri": 4,
    "Saturday": 5, "Sat": 5,
    "Sunday": 6, "Sun": 6
}
# 用户输入
user_input = "Friday"
# 获取数字
if user_input in weekday_name_to_num:
    num = weekday_name_to_num[user_input]
    print(f"'{user_input}' 对应的数字是: {num}") # 输出: 4
else:
    print("无效的星期名称。")

希望这份详细的解释能帮助你完全掌握 Python 中使用 datetime 处理星期的各种方法!

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