Сегодня с помощью одного действительно «грязного» хака, я покажу как практически с помощью одного выражения определить какой день недели был в указанную вами дату.
Определяем вот такую функцию, принимающую три параметра — день, месяц и год интересующей даты:
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); }