【问题标题】:Get Day name from Weekday int从 Weekday int 获取日期名称
【发布时间】:2016-03-31 18:57:55
【问题描述】:

我有一个工作日整数 (0,1,2...),我需要获取日期名称 ('Monday', 'Tuesday',...)。

是否有内置的 Python 函数或执行此操作的方法?

这是我编写的函数,它可以工作,但我想从内置的日期时间库中获取一些东西。

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.datetime 或 datetime.date 对象,以便您的工作日整数需要更改为 datetime 对象。

标签: python date datetime


【解决方案1】:

使用calendar module 更符合 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']

【讨论】:

  • 很好的解释。我不知道日历库。
  • 谢谢!这个库需要更好的文档。我必须查看代码以发现 calendar.day_name 有一个 __getitem__ 方法,该方法使用代表一周的日期时间对象 (calendar.day_name._days) 对列表进行切片,并返回一个表示日期名称的格式化字符串或一个列表,如果你传入一个切片。
  • 这非常适合 pandas - 在分组后按天重新索引,以便按顺序排列日期:data.groupby('day').size().reindex(calendar.day_name).plot.bar() - 绘制数据的每周分布。 (day 列包含工作日名称)
【解决方案2】:

如果您只需要从 datetime 对象中打印日期名称,您可以这样使用:

current_date = datetime.now
current_date.strftime('%A')  # will return "Wednesday"
current_date.strftime('%a')  # will return "Wed"

【讨论】:

    【解决方案3】:

    我一直在使用日历模块:

    import calendar
    calendar.day_name[0]
    'Monday'
    

    【讨论】:

    • 比将日期名称硬编码到代码中要好。 calendar 也适用于 locale,因此日期名称会根据需要自动调整。
    【解决方案4】:

    很简单:

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

    【讨论】:

    • 这行不通 - OP 希望 6 的工作日返回 Sunday,但这会返回 Saturday
    • @OrangeFlash81 谢谢!现在很容易,因为没有任何偏移:D
    【解决方案5】:

    您可以使用一个列表,根据您的论点从中获取项目:

    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 谢谢,已解决。
    • 如果你这样做并且星期一得到一个 0(零),它将返回 None,这可能会导致异常。您需要执行return days[weekday] if -1 &lt; weekday &lt; len(days) else None 才能返回"Monday"
    【解决方案6】:

    假设您必须根据特定日期查找日期,您可以使用内置函数。

    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) 的星期几(0 是星期一) –31)。

    calendar.day_name - 表示当前语言环境中星期几的数组

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

    【讨论】:

      【解决方案7】:

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

      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
      

      【讨论】:

        【解决方案8】:

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

        days=["sunday","monday"," Tuesday", "Wednesday" ,"Thursday", "Friday", "Saturday"]
        def date(i):
        
            return days[i]
        print (date(int(input("input index.  "))))
        

        【讨论】:

          【解决方案9】:

          尽管有所有优雅的内置解决方案,但我更喜欢使用dictionary,例如:

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

          详情:

          我发现这是一个非常适合 dictionaries 的用例,因为这将允许您使用适合您需要的任何语言或缩写,以及将任何一天设置为一周的第一天。 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]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-02-24
            • 2019-10-14
            • 1970-01-01
            • 2010-12-11
            • 2012-01-12
            • 2016-12-09
            相关资源
            最近更新 更多