구글애드센스


서기 1년 1월 1일은 무슨요일일까? STUDY



만년달력을 짰다. 전부 디스플레이 해주는걸로 만들다가 도대체가 배열안쓰고는
힘든거 같아서 그건 나중에 마무리 짓기로 하고 일단은 그냥 무슨요일인지만
계산해주는걸로다가 만들었다.

만년달력이란게 프로그래머들은 알겠지만 서기 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시간동안 삽질을
한거다. 젠장..하하하하..




덧글

  • windily 2007/03/09 13:17 # 답글

    저도 한번은 심심해서 그달의 달을 출력해주는 프로그램을 짜본적이 있었지요. 그게 재미삼아 시작한 일이였는데 그걸로 2일을 끌줄은 몰랐지요;
  • muzie 2007/03/09 13:55 # 답글

    저는 이게 업이 될 사람이라 말입니다 ^^;;;
  • 바죠 2007/03/09 17:29 # 답글

    유닉스 명령어 cal 1
    을 입력하니깐?
    1년1월1일은 토요일로 나옵니다.
  • muzie 2007/03/09 17:58 # 답글

    음.. 날짜를 세는 규격에 따라 달라지게 되겠네요. 제가 위에 서술한 방식은 1년 1월 1일이 월요일이라는 가정하에서 윤년과 평년을 계산 400년 윤년까지 포함해서 현재 요일 2007년 3월 9일이 금요일이란 것을 검증해 보인것입니다.

    실제로 제가 처음 4년 윤년에 대한것만을 생각하고 있었을 때는 위에 글에도 있지만 일요일로 나왔었습니다. 그리고 그전에는 토요일로도 나왔었구요. 현재 사용하고 있는 력을 적용했을때 (그게 그레고리력) 가장 정확한 답이 나올것이라 생각됩니다 ^^
  • 작은골렘 2007/03/12 18:16 # 삭제 답글

    1년1월1일은 아마 월요일이었겠지만

    달력이 생긴뒤로 역법이 서너번 바뀌었을걸?
  • muzie 2007/03/12 20:25 # 삭제 답글

    응 중간에 정치적인 이유도 있었고 여러가지 복합적인 이유가 있었어. 어떤 해는 10월달이 반도 못가서 끝나버린 해도 있었고 어떤해는 또 뭐 어떻고 하는.. 저 알고리즘(?)이라고 해야하나.. 암튼 저건 지금 우리가 쓰고 있는 그레고리력으로 계산을 했을때 1년 1월 1일 월요일이 나오는데 율리우스력이라던가 다른 역법을 쓰게 되면 중간에 그런 일들을 고려하지 않으면 전혀 엉뚱한 답이 나온다구. 애초에 1년 1월 1일이 월요일인진 잘 모르겠다. 암튼 참 신기해.
  • muzie 2007/03/14 01:21 # 답글

    중요한건 내가 저 프로그램을 만든 근본적인 목적은 1년 1월 1일이 월요일이라는 가정과 역법 한가지 만으로 동일 알고리즘(?)에서 2006년 3월 9일이 금요일이란 것을 증명한거야.
  • 백두산 2018/12/27 13:53 # 삭제 답글

    AD2002. 12. 31화요일
    - AD 1. 1. 1 ?
    ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ ㅡ
    2002 x 365 = 730730일
    윤일 2002 ÷ 4 = 500. . .2
    윤일은 500일
    윤일 제외일
    AD 4, AD 1700, AD 1800
    AD 1900
    AD 1582.10.5 - 10.14 10일
    소계 14일

    계산
    730730
    + 500
    ㅡㅡㅡㅡㅡㅡ
    731230
    - 14
    ㅡㅡㅡㅡㅡㅡ
    731216
    - 1ㅡ 시작일 제외
    ㅡㅡㅡㅡㅡㅡ (AD 1.1.1)
    731215

    731215 ÷ 7
    = 104459. . .2
    나머지가 2라는 의미는
    AD2002.12.31 화요일은
    기준일 AD1.1.1이후 2일이 지난
    것과 같습니다.
    그러므로 AD.1.1.1은 월요일이 아니라 일요일입니다.
  • muzie 2018/12/27 21:48 #

    그레고리력 1년 1월 1일을 월요일이라고 가정하고 동작합니다. 만년달력을 짤 때 기준인거고.. 풀이는 본문 글에 적혀있습니다.
    댓글 다신 내용은 무슨 얘긴지 잘 모르겠습니다.

    https://www.quora.com/What-was-the-day-on-1st-Jan-0001-AD
    Rohit Kumar 라는 사람의 댓글을 보시면 됩니다.
댓글 입력 영역