杰瑞科技汇

python datetime 周几

在 Python 中,使用 datetime 模块获取星期几非常简单,主要有两种方法,一种是返回数字(0-6 或 1-7),另一种是返回星期名称的字符串。

python datetime 周几-图1
(图片来源网络,侵删)

使用 weekday()isoweekday()

这两个方法都返回一个代表星期几的整数,但它们的起始编号不同。

datetime.date.weekday()

  • 返回值:一个整数,周一为 0,周日为 6
  • 适用对象datetime.date 对象和 datetime.datetime 对象。

示例代码:

import datetime
# 获取当前日期和时间
now = datetime.datetime.now()
# 只获取当前日期
today = datetime.date.today()
print(f"当前完整时间: {now}")
print(f"当前日期: {today}")
# 使用 weekday()
weekday_num_from_0 = today.weekday()
print(f"\n使用 weekday() (周一=0, 周日=6): {weekday_num_from_0}")
# 手动映射到中文
weekdays_zh_from_0 = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
print(f"今天是: {weekdays_zh_from_0[weekday_num_from_0]}")

datetime.date.isoweekday()

  • 返回值:一个整数,周一为 1,周日为 7,这符合 ISO 8601 标准。
  • 适用对象datetime.date 对象和 datetime.datetime 对象。

示例代码:

import datetime
today = datetime.date.today()
# 使用 isoweekday()
weekday_num_from_1 = today.isoweekday()
print(f"使用 isoweekday() (周一=1, 周日=7): {weekday_num_from_1}")
# 手动映射到中文
weekdays_zh_from_1 = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
print(f"今天是: {weekdays_zh_from_1[weekday_num_from_1 - 1]}") # 注意索引要减1

使用 strftime() 格式化

strftime() 方法可以将日期时间对象格式化为字符串,通过特定的格式代码,可以直接获取星期几的名称。

常用格式代码

  • %A: 返回完整的星期名称(如 "Monday", "Tuesday")。
  • %a: 返回简写的星期名称(如 "Mon", "Tue")。
  • %w: 返回数字,周日为 0,周六为 6

示例代码:

import datetime
now = datetime.datetime.now()
# 获取完整的星期名称 (e.g., Monday)
full_weekday_name = now.strftime('%A')
print(f"完整的星期名称: {full_weekday_name}")
# 获取简写的星期名称 (e.g., Mon)
short_weekday_name = now.strftime('%a')
print(f"简写的星期名称: {short_weekday_name}")
# 获取数字,周日为0 (e.g., 1 for Monday)
weekday_num_from_0_strftime = now.strftime('%w')
print(f"数字 (周日=0): {weekday_num_from_0_strftime}")
# 获取中文星期几 (需要额外处理)
# 方法1:创建一个中英文映射字典
weekday_map = {
    "Monday": "周一",
    "Tuesday": "周二",
    "Wednesday": "周三",
    "Thursday": "周四",
    "Friday": "周五",
    "Saturday": "周六",
    "Sunday": "周日"
}
zh_weekday = weekday_map.get(now.strftime('%A'), "未知")
print(f"中文星期几: {zh_weekday}")
# 方法2:更简洁的列表映射 (假设系统环境是英文)
# 注意:此方法依赖于 strftime('%A') 的输出语言,如果系统语言不是英文则会失效
weekdays_en = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
zh_weekdays = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
try:
    index = weekdays_en.index(now.strftime('%A'))
    print(f"中文星期几 (列表法): {zh_weekdays[index]}")
except ValueError:
    print("无法识别的星期名称")
# 获取中文星期几(推荐且稳定的方法)
# 使用 locale 模块设置语言环境
import locale
# 设置为中文环境 (Windows可能需要 'zh_CN.UTF-8' 或 'chinese')
try:
    # 尝试设置系统默认的中文locale
    locale.setlocale(locale.LC_TIME, 'zh_CN.UTF-8')
    # 或者使用 'chinese' (在某些系统上有效)
    # locale.setlocale(locale.LC_TIME, 'chinese')
    # 现在strftime('%A')会返回中文
    chinese_weekday = now.strftime('%A')
    print(f"直接获取中文星期几: {chinese_weekday}")
except locale.Error:
    print("无法设置中文locale,请确保系统支持。")

总结与推荐

方法 返回值 说明 推荐场景
weekday() int (0-6) 周一为0,周日为6 需要进行数字计算或索引操作时。
isoweekday() int (1-7) 周一为1,周日为7 遵循ISO标准,需要1-7的编号时。
strftime('%A') str (完整名称) 返回系统语言环境的星期名称 需要显示星期名称(如 "Monday")时。
strftime('%a') str (简写名称) 返回系统语言环境的星期简写 需要显示简写(如 "Mon")时。

如何选择?

  1. 如果只需要一个数字

    • 想让周一是第一天(0),用 weekday()
    • 想让周一是第一天(1),用 isoweekday()
  2. 如果需要显示星期名称

    • 如果你的程序主要在英文环境下运行,直接用 now.strftime('%A') 即可。
    • 如果你的程序需要显示中文星期几,最稳定可靠的方法是使用 locale 模块设置语言环境后再调用 strftime('%A'),如果无法设置locale,则采用创建字典映射的方法。

获取中文星期几的最佳实践

import datetime
import locale
def get_chinese_weekday(dt_obj):
    """
    获取一个datetime对象对应的中文星期几
    """
    # 创建一个中英文映射字典,不依赖系统locale
    weekday_map = {
        "Monday": "周一",
        "Tuesday": "周二",
        "Wednesday": "周三",
        "Thursday": "周四",
        "Friday": "周五",
        "Saturday": "周六",
        "Sunday": "周日"
    }
    # 获取英文星期名称
    en_name = dt_obj.strftime('%A')
    # 从字典中查找对应的中文
    return weekday_map.get(en_name, "未知")
# --- 使用示例 ---
now = datetime.datetime.now()
# 方法1:使用字典映射 (推荐,稳定)
zh_weekday_1 = get_chinese_weekday(now)
print(f"今天是: {zh_weekday_1}")
# 方法2:使用locale (可能受系统环境影响)
try:
    # 尝试设置locale为中文
    locale.setlocale(locale.LC_TIME, 'zh_CN.UTF-8')
    # 如果成功,strftime('%A')会直接返回中文
    zh_weekday_2 = now.strftime('%A')
    print(f"今天是: {zh_weekday_2}")
except locale.Error:
    print("无法设置中文locale,请检查系统配置。")
分享:
扫描分享到社交APP
上一篇
下一篇