Как рассчитать день недели при условии год и день? - PullRequest
1 голос
/ 13 марта 2012

Например, если я ввожу год - 2012 и день 72, он должен возвращать вторник. Следующий код вернет правильный день недели, но требует ввода месяца. Как я могу сделать это без аргумента month, так как я не требую, чтобы пользователь печатал в месяц?

days = {0:'Monday', 1:'Tuesday', 2:'Wednesday', 3:'Thursday', 4:'Friday', 5:'Saturday', 6:'Sunday'}

userdate = date(year, month, day)
weekday = userdate.weekday()

return days[weekday]

Ответы [ 3 ]

4 голосов
/ 13 марта 2012

ИЛИ:

from datetime import datetime, timedelta

startDate = datetime(your_year, 1, 1)
endDate = (startDate + timedelta(days=days_from_the_begining)).weekday()

Например:

from datetime import datetime, timedelta

def get_weekday(year, dayOfTheYear):
    days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

    userWeekDay = (datetime(year, 1, 1) + timedelta(days=dayOfTheYear)).weekday()
    return days[userWeekDay]
3 голосов
/ 13 марта 2012

Вот версия, которая может быть адаптирована для любого языка. Деления должны быть целыми числами, я использую //, чтобы убедиться, что это работает в Python 3.

def day_of_week(year, day, one_based=false):
    days = ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
    weekday = (year*365 + (year-1)//4 - (year-1)//100 + (year-1)//400 + day + (5 if one_based else 6)) % 7
    return days[weekday]

>>> day_of_week(2012, 72)
'Tuesday'

Странная часть, где он продолжает делить год на разные значения, учитывает правила високосного года. Год - это високосный год, когда он делится на 4, за исключением случаев, когда он делится на 100, а не делится на 400. Таким образом, 2000 год был високосным, а 1900 - нет.

2 голосов
/ 13 марта 2012

Вы можете использовать datetime.datetime.strptime:

from datetime import datetime
weekday = datetime.strptime('%d %d' % (year, day_of_year), '%Y %j').weekday()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...