Получение дня недели в году начинается с - PullRequest
0 голосов
/ 05 ноября 2018

Я делал функцию в C ++, чтобы получить день недели с указанием дня, месяца и года (с 1900 года). То, как я должен это сделать (я выполняю приказы, это упражнение), - это модуль 7 от общего количества прошедших дней.

Например, 21 ноября 2018 года будет 325-м днем ​​этого года (с учетом високосных лет). Днем недели будет 325% 7, что даст число от 0 до 6, 0 - воскресенье, 1 - понедельник и т. Д., До 6 - суббота.

Но это будет работать только в те годы, которые начинаются в понедельник. 2018 работает, но 2019 будет отключен на 1 день, как это начинается во вторник.

Моя идея исправить это, зная, в какой день начинается этот год, и добавив его к заданному номеру 0-6 (исправляя его, если он больше 6), но я должен был бы использовать эту функцию годом ранее. который будет делать это до 1900 года, который будет установлен на понедельник. Звучит ужасно, и я не могу придумать другого способа сделать это.

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

http://www.cplusplus.com/reference/ctime/tm/
http://www.cplusplus.com/reference/ctime/mktime/

int weakDayOfYearBegin(int year)
{
    std::tm t {};
    t.tm_year = year - 1900;
    t.tm_mday = 1;
    std::mktime(&t);
    return t.tm_wday;
}

https://wandbox.org/permlink/1ZnByeurgMrEF3fA

0 голосов
/ 05 ноября 2018

Если вы не хотите использовать какие-либо библиотеки и делаете это исключительно с помощью вычислений, вот решение.

http://mathforum.org/dr.math/faq/faq.calendar.html

или простое объяснение видео .

Что вы можете сделать, это преобразовать эту логику в вашу программу и узнать день недели.

int dayofweek(int d, int m, int y) 
{ 
    static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; 
    y -= m < 3; 
    return ( y + y/4 - y/100 + y/400 + t[m-1] + d) % 7; 
} 

Код источника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...