【问题标题】:Day of week constants with Sunday = 0 in PythonPython 中星期天 = 0 的星期常量
【发布时间】:2016-05-26 18:49:03
【问题描述】:

日历模块具有以

开头的星期几常量
calendar.MONDAY
Out[60]: 0

但是,有时必须与使用约定 Sunday = 0 的系统(可能用 JavaScript 编写)进行交互。Python 是否提供此类常量?

【问题讨论】:

    标签: python datetime calendar weekday


    【解决方案1】:

    希望这会有所帮助:

    from datetime import datetime
    weekdays_dic ={0:'Mon', 1:'Tue',2:'Wed',3:'Thu',4:'Fri',5:'Sat', 6:'SUN'}
    print(weekdays_dic[datetime.today().weekday()])
    

    【讨论】:

    • 错了 - weekday 返回 0 表示周一,而不是周日
    • 感谢指出,已相应编辑
    【解决方案2】:

    我只是将它与mydate.isoweekday() 一起使用,就可以了。

    def weekday_sun_zero(self, isoweekday):
        return 0 if isoweekday == 7 else isoweekday
    

    【讨论】:

    • return isoweekday % 7为简洁起见
    【解决方案3】:

    Python 标准库中没有这样的常量。然而,定义你自己的很简单:

    SUN, MON, TUE, WED, THU, FRI, SAT = range(7)
    

    或者,当使用 Python 3.4 或更高版本时,您可以使用enum module functional API

    from enum import IntEnum
    
    Weekdays = IntEnum('Weekdays', 'sun mon tue wed thu fri sat', start=0)
    
    weekday == Weekdays.wed
    

    然后您还可以通过调用enum.Enum 对象将工作日整数映射到枚举值:

    weekday_enum = Weekdays(weekday)
    

    我使用了 3 个字母的缩写,但如果您觉得更易读,您可以随意使用全名。

    【讨论】:

    • 使用IntEnum怎么样?
    • 对不起,我的问题的前提是错误的。日历和日期时间模块使用相同的约定。我已经编辑了这个问题,但最好还是简单地删除它?
    • @kuzzooroo:在使用函数式API时使用IntEnum没有意义;我们已经在自动编号,所以不能意外使用非整数值。
    • 我想你可以提出关于datetime.datetime.isoweekday() 的问题,它使用编号为 1 到 7 的周一至周日? :-)
    • 使用IntEnum 的目的是避免使用.value。我得到Weekdays.wed == 2IntEnum 没有.value
    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2012-01-28
    • 2020-02-24
    • 2018-10-28
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多