从星期几的整数获取星期几的名称

90

我有一个代表工作日的整数(0、1、2...),需要获取对应的星期名称('Monday'、'Tuesday'等)。

Python是否有内置函数或方法可以实现此功能?

这是我编写的函数,它可以工作,但我想使用内置的datetime库中的函数。

def dayNameFromWeekday(weekday):
    if weekday == 0:
        return "Monday"
    if weekday == 1:
        return "Tuesday"
    if weekday == 2:
        return "Wednesday"
    if weekday == 3:
        return "Thursday"
    if weekday == 4:
        return "Friday"
    if weekday == 5:
        return "Saturday"
    if weekday == 6:
        return "Sunday"

如果你想使用日期时间方法,那么查看文档通常是第一步。但是根据我的经验,如果你想使用日期时间方法,那么你需要开始创建datetime.datetime或datetime.date对象,这样你的星期几整数就需要改为日期时间对象。 - Dzhao
9个回答

171

使用日历模块更符合Pythonic风格:

>>> import calendar
>>> list(calendar.day_name)
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

或者,您可以使用常见的日期缩写:

>>> list(calendar.day_abbr)
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

按照您的意愿进行索引:

>>> calendar.day_name[1]
'Tuesday'

(如果周一不是一周的第一天,请使用setfirstweekday来更改)

使用日历模块的优点是具有位置感知能力:

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
'de_DE'
>>> list(calendar.day_name)
['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']

1
很好的解释。我不知道关于Calendar库的事情。 - GER
1
谢谢!这个库需要更好的文档。我不得不查看代码才发现calendar.day_name有一个__getitem__方法,它使用表示一周的日期时间对象列表(calendar.day_name._days)进行切片,并返回表示该天名称的格式化字符串或者如果您传入一个切片,则返回一个列表。 - dasdachs
这对于pandas非常有用 - 在分组后按天重新索引,以使天数有序:data.groupby('day').size().reindex(calendar.day_name).plot.bar() - 绘制数据的每周分布图。(day列包含工作日名称) - Tomasz Gandor

28
如果你只需要从日期时间对象中打印出星期几,可以这样使用:
current_date = datetime.now
current_date.strftime('%A')  # will return "Wednesday"
current_date.strftime('%a')  # will return "Wed"

19

我一直在使用日历模块:

import calendar
calendar.day_name[0]
'Monday'

2
比在您的代码中硬编码日期更好。日历也与locale一起使用,因此如果需要,日期名称将自动调整。 - martineau

2
非常简单:

只需要:

week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
week[weekday]

这个不起作用 - OP想要星期几为6返回Sunday,但是这返回的是Saturday - Aaron Christiansen
@OrangeFlash81 谢谢!现在很容易了,因为没有任何偏移量 :D - xiº

2
您可以使用一个列表,根据您的参数获取其中的一项:
def dayNameFromWeekday(weekday):
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    return days[weekday]

如果您希望该函数在传入无效数字(例如“8”)时不会导致错误,您可以在返回之前检查列表中是否存在该项:
def dayNameFromWeekday(weekday):
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    return days[weekday] if 0 < weekday < len(days) else None

这个函数可以像你期望的那样使用:

>>> dayNameFromWeekday(6)
Sunday
>>> print(dayNameFromWeekday(7))
None

我不确定datetime内置了这个功能,但是这仍然是一种非常高效的方法。


@zondo 谢谢,已经修复了。 - Aaron Christiansen
如果你这样做,星期一得到0(零),它将返回None,可能会导致异常。你需要这样做:return days[weekday] if -1 < weekday < len(days) else None,才能返回“星期一”。 - Victor Domingos

1
你可以使用内置函数来实现这一点,例如假设你需要根据特定日期查找日期。
import calendar

month,day,year = 9,19,1995
ans =calendar.weekday(year,month,day)

print(calendar.day_name[ans])

calendar.weekday(year, month, day) - 返回年份(1970-...)、月份(1-12)和日期(1-31)对应的星期几(0代表星期一)。

calendar.day_name - 一个数组,表示当前语言环境下的星期几名称。

更多参考资料 - https://docs.python.org/2/library/calendar.html#calendar.weekday


0

尽管有所有优雅的内置解决方案,我仍更喜欢使用字典这样的东西:

{0:'mon', 1:'tue', 2:'wed', 3:'thur', 4:'fri', 5:'sat', 6:'sun'}

详细信息:

我认为这是一个非常适合使用 字典 的案例,因为这将让您使用任何符合您需求的语言或缩写,并设置任何一天作为一周的第一天。例如,key, value 对中的一个示例可以是 daynames[0] = 'mon'。而且你所需要做的就是一行代码就可以搞定。

daynames = {0:'mon', 1:'tue', 2:'wed', 3:'thur', 4:'fri', 5:'sat', 6:'sun'}

现在,运行daynames[1]将返回'tue'

像这样设置还可以释放dicts的许多有趣可能性。如果您有一个包含未排序整数的列表或pandas系列,例如lst = [5, 3, 2, 6, 7,],只需运行:

[daynames[e] for e in lst]

你将会得到:

['sat', 'thur', 'wed', 'sun', 'tue']

完整示例:

daynames = {0:'mon',1:'tue',2:'wed',3:'thur',4:'fri',5:'sat',6:'sun'}
lst = [5, 3, 2, 6, 1]
[daynames[e] for e in lst]

0

你可以创建自己的列表,并将其与格式一起使用。

import datetime

days_ES = ["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"]

t = datetime.datetime.now()
f = t.strftime("{%w} %Y-%m-%d").format(*days_ES)

print(f)

输出:

Lunes 2018-03-12

0

你可以像这样使用索引号:

days=["sunday","monday"," Tuesday", "Wednesday" ,"Thursday", "Friday", "Saturday"]
def date(i):

    return days[i]
print (date(int(input("input index.  "))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接