Вот версия, которая может быть адаптирована для любого языка. Деления должны быть целыми числами, я использую //
, чтобы убедиться, что это работает в 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 - нет.