2007년 03월 09일
서기 1년 1월 1일은 무슨요일일까?
힘든거 같아서 그건 나중에 마무리 짓기로 하고 일단은 그냥 무슨요일인지만
계산해주는걸로다가 만들었다.
만년달력이란게 프로그래머들은 알겠지만 서기 1년 1월 1일이 월요일이라는
가정으로부터 시작한다. 그래서 윤년마다 1을 더해주고 (2월이 29일까지니까)
짝수달 홀수달 일정한 규칙에 따라 며칠씩 더해주는 식..
암튼 짜긴 짰는데 1년 1월 1일이 월요일이라고 가정을 하면 지금 요일이
맞지가 않는다. 그래서 지금 요일에 끼워 맞추면 1년 1월 1일은 일요일이 나온다-_-;
더 웃긴건 다른 프로그램들 소스 찾아서 돌려봤더니 일요일이란것도 있고
금요일이란것도 있고 오류나버리는 것도 있고- _-; 뭐냐 대체가;;
그래서 계산해봤다.
오늘은 2007년 3월 9일 금요일.
2006년 * 365일 = 732190일.
2006/4 = 501번 = 윤년 501번. 즉 732190 + 501 = 732691일.
거기에 2월까지 59일 3월달에 9일 더하면 +68일.
요일을 생각해보면 1일이 월요일이었으니까 7로 나눠 나머지가 1이면 월요일
부터 쭉~ 이렇게 일꺼다. 나눠지면 일요일인거고.
그래서 실제로 732759%7을 해보면 6이 나온다 -_-; 오늘이 월요일은..아니잖아;
금요일이다 금요일.. 그럼 6이 금요일이면 1일은 일요일이잖아 ;ㅁ;
대체 뭐가 잘못된걸까.. -_ㅠ
또! 그래서 결국 검색을 할 수 밖에 없었다.
우리의 최강무기 뇌입어 언니에게 물어본 결과..
"너 뭐하는 색히야?! 프로그래밍 하려는 색히가 이정도 기본지식도 없냐?!"
라는 나레이션이 흘러가는것처럼 느껴지는 답변..
1년은 365일 이지만 4년마다 한번씩은 윤년이 와 366일리 되지요.
즉, 원래 2월은 평년이 28일까지 있는 것이지만, 만일 윤년이 없이 언제나
평년이라면 1년의 길이가 365일로 되어 실제보다 0.2422일 짧아지므로 점차
역일(曆日)과 계절이 달라집니다.
그러므로 율리우스력에서는 4년마다 2월을 29일로 함으로써 4년간의
연평균 일수를 365.25일로 정하였지요.
이 값은 실제보다 1년에 0.0078일이 길어집니다.
그후의 그레고리력에서는 다음과 같은 치윤법(置閏法)을 정하고 시행하였
습니다. 즉,
① 서력 기원 연수가 4로 나누어 떨어지는 해는 우선 윤년으로 하고,
② 그 중에서 100으로 나누어 떨어지는 해는 평년으로 하며,
③ 다만 400으로 나누어 떨어지는 해는 다시 윤년으로 정하였다.
이로써 1년의 평균길이를 365.2425일로 정하여 역에 썼으므로 실제의 1년보다
0.0003일이 길지요
그랬던 거다.. 윤년과 평년이라는게 같이 존재한다는 사실을 깜빡하고 있었던거다.
내 기억으로는 초등학교때 저거 관련해서 배웠던것 같다. 지금 생각해보면
엄청난 내용의 지식이었는데 그 어린시절 주입식 교육땐 그냥 외우기만 했었으니
별로 주변지식도 알고 싶지 않았고.. 그러니까 까먹었던 거라고 위로해본다..;
암튼
what=(year-1)*365+(month-1)*30+il;
plus=year/4;
printf("%d",732759%7);// 윤년 횟수 쁘라스~
what=what+plus; // 더하는 작업.
pyoung=year/100;
ayun=year/400;
what=what-pyoung+ayun;
요딴 삽질을 계속계속 추가해 나간 결과

요로코롬 완성이 되었다는.. 그러니까 난 이걸 2시간동안 삽질을
한거다. 젠장..하하하하..
# by | 2007/03/09 13:15 | STUDY | 트랙백(1) | 덧글(7)




☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
제목 : 달력 프로그램.
달력 짜는 프로그램 언젠가는 쓸일이 있겠지? ...more
을 입력하니깐?
1년1월1일은 토요일로 나옵니다.
실제로 제가 처음 4년 윤년에 대한것만을 생각하고 있었을 때는 위에 글에도 있지만 일요일로 나왔었습니다. 그리고 그전에는 토요일로도 나왔었구요. 현재 사용하고 있는 력을 적용했을때 (그게 그레고리력) 가장 정확한 답이 나올것이라 생각됩니다 ^^
달력이 생긴뒤로 역법이 서너번 바뀌었을걸?