首页 文章

如何在Python中获取日期的星期几?

提问于
浏览
373

我想找出以下内容:给定一个日期( datetime 对象),一周的相应日期是什么 .

例如星期日是第一天,星期一:第二天......依此类推

然后,如果输入是今天的日期 .

示例

>>> today = datetime.datetime(2017, 10, 20)
>>> today.get_weekday()  # what I look for

输出可能 6 (自周五以来)

15 回答

  • 10
  • 622

    使用 weekday()docs):

    >>> import datetime
    >>> datetime.datetime.today()
    datetime.datetime(2012, 3, 23, 23, 24, 55, 173504)
    >>> datetime.datetime.today().weekday()
    4
    

    从文档:

    以星期为单位返回星期几,其中星期一为0,星期日为6 .

  • 20

    在1700/1/1之后没有导入日期的解决方案

    def weekDay(year, month, day):
        offset = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]
        week   = ['Sunday', 
                  'Monday', 
                  'Tuesday', 
                  'Wednesday', 
                  'Thursday',  
                  'Friday', 
                  'Saturday']
        afterFeb = 1
        if month > 2: afterFeb = 0
        aux = year - 1700 - afterFeb
        # dayOfWeek for 1700/1/1 = 5, Friday
        dayOfWeek  = 5
        # partial sum of days betweem current date and 1700/1/1
        dayOfWeek += (aux + afterFeb) * 365                  
        # leap year correction    
        dayOfWeek += aux / 4 - aux / 100 + (aux + 100) / 400     
        # sum monthly and day offsets
        dayOfWeek += offset[month - 1] + (day - 1)               
        dayOfWeek %= 7
        return dayOfWeek, week[dayOfWeek]
    
    print weekDay(2013, 6, 15) == (6, 'Saturday')
    print weekDay(1969, 7, 20) == (0, 'Sunday')
    print weekDay(1945, 4, 30) == (1, 'Monday')
    print weekDay(1900, 1, 1)  == (1, 'Monday')
    print weekDay(1789, 7, 14) == (2, 'Tuesday')
    
  • 1

    如果日期是日期时间对象,则这是一种解决方案 .

    import datetime
    def dow(date):
        days=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
        dayNumber=date.weekday()
        print days[dayNumber]
    
  • 3

    使用Canlendar模块

    import calendar
    a=calendar.weekday(year,month,day)
    days=["MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY"]
    print(days[a])
    
  • 3

    如果您想要英文日期:

    >>> from datetime import date
    >>> datetime.datetime.today().strftime('%A')
    'Wednesday'
    

    阅读更多:https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

  • 5

    如果您想要英文日期:

    from datetime import date
    import calendar
    my_date = date.today()
    calendar.day_name[my_date.weekday()]  #'Wednesday'
    
  • 34

    我为codechef question解决了这个问题 .

    import datetime
    dt = '21/03/2012'
    day, month, year = (int(x) for x in dt.split('/'))    
    ans = datetime.date(year, month, day)
    print ans.strftime("%A")
    
  • 205

    这是我的python3实现 .

    months = {'jan' : 1, 'feb' : 4, 'mar' : 4, 'apr':0, 'may':2, 'jun':5, 'jul':6, 'aug':3, 'sep':6, 'oct':1, 'nov':4, 'dec':6}
    dates = {'Sunday':1, 'Monday':2, 'Tuesday':3, 'Wednesday':4, 'Thursday':5, 'Friday':6, 'Saterday':0}
    ranges = {'1800-1899':2, '1900-1999':0, '2000-2099':6, '2100-2199':4, '2200-2299':2}
    
    def getValue(val, dic):
        if(len(val)==4):
            for k,v in dic.items():
                x,y=int(k.split('-')[0]),int(k.split('-')[1])
                val = int(val)
                if(val>=x and val<=y):
                    return v
        else:
            return dic[val]
    
    def getDate(val):
        return (list(dates.keys())[list(dates.values()).index(val)]) 
    
    
    
    def main(myDate):
        dateArray = myDate.split('-')
        # print(dateArray)
        date,month,year = dateArray[2],dateArray[1],dateArray[0]
        # print(date,month,year)
    
        date = int(date)
        month_v = getValue(month, months)
        year_2 = int(year[2:])
        div = year_2//4
        year_v = getValue(year, ranges)
        sumAll = date+month_v+year_2+div+year_v
        val = (sumAll)%7
        str_date = getDate(val)
    
        print('{} is a {}.'.format(myDate, str_date))
    
    if __name__ == "__main__":
        testDate = '2018-mar-4'
        main(testDate)
    
  • 0

    为了让星期日从1到星期六为7,这是你问题最简单的解决方案:

    datetime.date.today().toordinal()%7 + 1
    

    他们都是:

    import datetime
    
    today = datetime.date.today()
    sunday = today - datetime.timedelta(today.weekday()+1)
    
    for i in range(7):
        tmp_date = sunday + datetime.timedelta(i)
        print tmp_date.toordinal()%7 + 1, '==', tmp_date.strftime('%A')
    

    输出:

    1 == Sunday
    2 == Monday
    3 == Tuesday
    4 == Wednesday
    5 == Thursday
    6 == Friday
    7 == Saturday
    
  • 9

    datetime库有时会出现strptime()的错误,所以我切换到dateutil库 . 以下是如何使用它的示例:

    from dateutil import parser
    parser.parse('January 11, 2010').strftime("%a")
    

    您从中获得的输出是 'Mon' . 如果您希望输出为'Monday',请使用以下命令:

    parser.parse('January 11, 2010').strftime("%A")
    

    这对我来说非常快 . 我在使用datetime库时遇到了问题,因为我想存储工作日名称而不是工作日编号,而使用datetime库的格式导致了问题 . 如果你没有遇到这个问题,太好了!如果你是,你可以肯定地去做,因为它有一个更简单的语法 . 希望这可以帮助 .

  • 1

    假设您获得了日,月和年,您可以:

    import datetime
    DayL = ['Mon','Tues','Wednes','Thurs','Fri','Satur','Sun']
    date = DayL[datetime.date(year,month,day).weekday()] + 'day'
    #Set day, month, year to your value
    #Now, date is set as an actual day, not a number from 0 to 6.
    
    print(date)
    
  • 6

    如果您有理由避免使用datetime模块,那么此功能将起作用 .

    注意:假设从Julian到公历的变化发生在1582年 . 如果您感兴趣的日历不适用,那么如果年份> 1582则更改行:相应地 .

    def dow(year,month,day):
        """ day of week, Sunday = 1, Saturday = 7
         http://en.wikipedia.org/wiki/Zeller%27s_congruence """
        m, q = month, day
        if m == 1:
            m = 13
            year -= 1
        elif m == 2:
            m = 14
            year -= 1
        K = year % 100    
        J = year // 100
        f = (q + int(13*(m + 1)/5.0) + K + int(K/4.0))
        fg = f + int(J/4.0) - 2 * J
        fj = f + 5 - J
        if year > 1582:
            h = fg % 7
        else:
            h = fj % 7
        if h == 0:
            h = 7
        return h
    
  • 0

    如果您不仅仅依赖于 datetime 模块, calendar 可能是更好的选择 . 例如,这将为您提供日期代码:

    calendar.weekday(2017,12,22);
    

    这会给你一天的感觉:

    days = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"]
    days[calendar.weekday(2017,12,22)]
    

    或者以python的风格,作为一个班轮:

    ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][calendar.weekday(2017,12,22)]
    
  • 19

    这里是如何将日期列表转换为日期

    import datetime,time
    ls={'1/1/2007','1/2/2017'}
    dt=datetime.datetime.strptime(ls[1], "%m/%d/%Y")
    print(dt)
    print(dt.month)
    print(dt.year)
    

相关问题