How do I get the day of week given a date?

前端 未结 26 1341
迷失自我
迷失自我 2020-11-22 04:40

I want to find out the following: given a date (datetime object), what is the corresponding day of the week?

For instance, Sunday is the first day, Mond

相关标签:
26条回答
  • 2020-11-22 05:05

    Use weekday():

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

    From the documentation:

    Return the day of the week as an integer, where Monday is 0 and Sunday is 6.

    0 讨论(0)
  • 2020-11-22 05:06

    If you'd like to have the date in English:

    from datetime import date
    import calendar
    my_date = date.today()
    calendar.day_name[my_date.weekday()]  #'Wednesday'
    
    0 讨论(0)
  • 2020-11-22 05:06

    A solution whithout imports for dates after 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')
    
    0 讨论(0)
  • 2020-11-22 05:07

    If you're not solely reliant on the datetime module, calendar might be a better alternative. This, for example, will provide you with the day codes:

    calendar.weekday(2017,12,22);
    

    And this will give you the day itself:

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

    Or in the style of python, as a one liner:

    ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"][calendar.weekday(2017,12,22)]
    
    0 讨论(0)
  • 2020-11-22 05:07

    Here is my python3 implementation.

    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 讨论(0)
  • 2020-11-22 05:08

    Here's a simple code snippet to solve this problem

    import datetime
    
    intDay = datetime.date(year=2000, month=12, day=1).weekday()
    days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
    print(days[intDay])
    

    The output should be:

    Friday
    
    0 讨论(0)
提交回复
热议问题