2011-04-26 3 views
11

일, 월, 년을 지정하면 요일을 반환하는 알고리즘은 무엇입니까?날짜 대 요일 알고리즘?

+3

의 배수가 아닌 도약 년, 매 4 년에 발생하지만 모든 100하지 : [요일을 계산 (HTTP : // EN .wikipedia.org/wiki/Calculating_the_day_of_the_week). – hammar

+1

약 5 초 만에 Google을 검색 할 수 있습니다. 그럼 그것에 대한 또 다른 질문입니다 : http://stackoverflow.com/questions/3017745/given-date-get-day-of-week-systemtime – darvids0n

+0

@ darvid : Windows 관련 Q & A로 생각하지 않습니다. 그것은 센다. – Potatoswatter

답변

22

std::mktimestd::localtime 기능을 사용하여 수행 할 수 있습니다. 이 함수는 POSIX뿐만 ​​아니라 C++ 표준 (C++ 03 §20.5)에서 위임되었습니다.

#include <ctime> 

std::tm time_in = { 0, 0, 0, // second, minute, hour 
     4, 9, 1984 - 1900 }; // 1-based day, 0-based month, year since 1900 

std::time_t time_temp = std::mktime(& time_in); 

// the return value from localtime is a static global - do not call 
// this function from more than one thread! 
std::tm const *time_out = std::localtime(& time_temp); 

std::cout << "I was born on (Sunday = 0) D.O.W. " << time_out->tm_wday << '\n'; 
+2

+1 upvoted. 이 질문을 다시 열도록 투표했습니다. 아마도 그것은 스택 오버플로 중복입니다, 나도 몰라. 그러나 이것은 실제 C++ 질문입니다 (진짜 질문이 아니기 때문에 닫았습니다). 그리고 이것은 좋은 대답입니다. –

+0

흠, downvote있어. 이유는 모르겠지만'std :: localtime'은 쓰레드에 안전하지 않습니다. [이 Q & A] (http://stackoverflow.com/q/7313919/153285)를 참조하십시오. – Potatoswatter

+0

나는 그가 받아들이는 대답을 알고 있지만 그가 정말로 요구 한 대답은 알지 못한다. –

0

출발점이 필요합니다. 오늘은 괜찮아. 그것을 하드 코딩하십시오.

그런 다음 한 달의 일 수를 나타낼 필요가 있습니다. 이것은 31, 28, 31, 30, 31, 30, ...입니다. 따라서 각 연도의 요일에 365 % 7을 더하거나 뺀 다음 (월 차이 일수) % 7을 다시 추가하고 뺄 수 있습니다. 등등.

주의해야 할 점 : 그 해는 400 위키 백과에

+0

그걸로 갈 수 있습니다. 하드 코딩은 완전히 괜찮습니다. –