우리가 사용하는 역법은 그레고리력이고, 엑셀에서도 당연히 그레고리력을 기본으로 지원한다.


엑셀에서 날짜는 단순한 숫자의 형태로 저장된다.

그레고리력을 기준으로 1900년 1월 1일1로 시작하여 하루가 지날때마다 1씩 증가시키는 것이다.

그래서, 엑셀에선 두 날짜 간의 간격을 계산하는 것은 단순한 빼기만으로 손쉽게 처리가 가능한 것이다.



그레고리력은 율리우스력[각주:1]윤년 계산에 오차가 있는 문제를 해결하기 위한 역법이다.

율리우스력에서 단순히 4년마다 윤년을 두어 오차가 생기던 문제를 조금 복잡한 윤년 규칙을 부여하여 거의 해결했다.


윤년의 규칙은 아래와 같다[각주:2].


1. 4로 나누어 떨어지는 해는 윤년, 그 밖의 해는 평년으로 한다.

2. 단, 4로 나누어 떨어지지만 100으로 나누어 떨어지는 해는 평년으로 한다.

3. 단, 400으로 나누어 떨어지는 해는 윤년으로 한다.


이 규칙으로 판단을 해보면, 1900년 평년이다.

1900은 4로도 100으로도 나누어 떨어지지만, 400으로 나누어 떨어지지 않기 때문.


그런데, 엑셀에서 이를 확인해보면 뭔가 이상한 결과가 나온다.

591900년 2월 28일에 해당하는데, 60은 3월 1일이 아니라 2월 29일로 계산된다.



과연 1900년은 평년이 맞는 걸까?




덧1. 이 의문을 제기하게 된 것은 동일한 규칙으로 날짜를 계산하는 코드를 만들었는데, 엑셀 계산과 언제나 하루 오차가 발생했기 때문


덧2. 사실, 1900년이 평년인 건 당연한 얘기고, 엑셀이 이렇게 계산하는 이유가 있을텐데, 왜 그런지 궁금함



  1. 그 유명한 율리우스 카이사르가 만든 역법 [본문으로]
  2. 이 규칙은 은근 헷갈리는데 사실 3 2 1 순으로 읽으면 간단함 [본문으로]
  1. kippler 2018.09.02 23:56 신고

    어디선가 본 내용인듯 하여 찾아보니, 조엘온소프트웨어 책에서 본 내용이네요.
    https://www.joelonsoftware.com/2006/06/16/my-first-billg-review/

    "조엘 온 소프트웨어 엑셀"로 검색하면 한글 번역본도 있터넷에 있습니다.

+ Recent posts