Как определить день недели по указанной дате

Сегодня с помощью одного действительно «грязного» хака, я покажу как практически с помощью одного выражения определить какой день недели был в указанную вами дату.

Определяем вот такую функцию, принимающую три параметра — день, месяц и год интересующей даты:

import std.stdio;

auto dayOfWeek(int day, int month, int year)
{
	enum Week
	{
		Sunday = 0,
		Monday,
		Tuesday,
		Wednesday,
		Thursday,
		Friday,
		Saturday
	}

	auto dw = ((year -= month < 3) + year / 4 - year / 100 + year / 400 + " bed=pen+mad."[month] + day) % 7;
	return cast(Week) dw;
}

void main()
{
        // тест на дате моего рождения - 14.04.1991
	writeln(dayOfWeek(14,4,1991));
}

Ну, очень «черная магия» в рецепте (спасибо сайту «Типичный программист» за отличную идею для реализациии) !

P.S : Бонус «Как определить количество дней в месяце по его номеру»

auto daysInMonth(int numberOfMonth)
{
	import std.math : floor;
	return 28 + (numberOfMonth + floor(numberOfMonth / 8.0)) % 2 + 2 % numberOfMonth + 2 * floor(1.0 / numberOfMonth); 
}

 

aquaratixc

Программист-самоучка и программист-любитель

Добавить комментарий