엑셀 날짜 일련번호와 1900년 윤년 버그
엑셀에서 받은 파일의 날짜 칸이 45123 같은 숫자로 보일 때를 위한 글입니다. 답부터 말하면 그 숫자는 1900년 1월 1일(또는 1904년 1월 1일)부터 센 날수이고, 왜 숫자가 하루씩 어긋나 보일 수 있는지가 아래에 있습니다.
1. 엑셀 날짜 일련번호가 무엇인가
엑셀은 날짜를 글자가 아니라 숫자로 저장하며 화면에는 2026-09-10 처럼 보여도 셀 안의 실제 값은 기준일부터 센 날수(일련번호)입니다. 이 숫자 덕분에 날짜끼리 빼서 며칠 차이인지 계산하거나 날짜에 숫자를 더해 다음 날을 구할 수 있고 셀 서식을 '일반'으로 바꾸면 숫자가, '날짜'로 바꾸면 같은 값이 날짜로 보입니다.
문제는 엑셀 밖으로 나갈 때인데, CSV 로 내보내거나 다른 프로그램이 서식 정보 없이 셀 값만 읽으면 날짜 서식이 사라지고 일련번호만 남아서 DB 추출본이나 API 응답에 45123 같은 숫자가 날짜 자리에 나타납니다.
2. 기본 규칙: 두 날짜 체계
엑셀은 두 기준일 중 하나로 날수를 세는데, 윈도우 엑셀의 기본값인 1900 날짜 체계는 1900년 1월 1일을 일련번호 1로 둡니다. macOS 엑셀의 옛 기본값인 1904 날짜 체계는 1904년 1월 1일을 일련번호 0으로 두며, 마이크로소프트 공식 문서는 같은 날짜(2011년 7월 5일)가 1900 체계에서는 40729, 1904 체계에서는 39267이라고 밝히고, 두 값의 차이는 항상 1,462일입니다.
지금의 macOS 엑셀도 기본값은 1900 체계로 바뀌었는데, 어느 체계를 쓰는지는 파일마다 다를 수 있으므로(엑셀의 파일 > 옵션 > 고급 메뉴에 그 설정이 있습니다) 두 값을 다 써 보고 현실적인 날짜가 나오는 쪽을 고르는 방법도 있습니다.
3. 1900년 윤년 버그: 이 화면의 세부 규칙
1900 날짜 체계에는 알려진 버그가 있는데, 엑셀은 1900년을 윤년으로 잘못 취급해 실제로 없는 1900년 2월 29일을 날수에 넣습니다. 그래서 1900년 1월 1일은 1, 1900년 2월 28일은 59, 존재하지 않는 1900년 2월 29일이 60을 차지하고, 1900년 3월 1일은 61이며, 이 화면의 src/lib/exceldate.ts 가 이 순서를 그대로 계산합니다.
마이크로소프트는 이 버그를 일부러 고치지 않습니다. 고치면 기존에 만들어진 모든 엑셀 문서의 날짜가 하루씩 당겨지기 때문입니다(공식 문서가 그렇게 밝히고 있습니다). 그래서 이 화면도 버그를 고쳐서 계산하지 않는데, 고치면 오히려 실제 엑셀과 안 맞는 틀린 도구가 됩니다.
1904 날짜 체계에는 이 버그가 없으며, 1904년 1월 1일부터 실제 그레고리력 그대로 날수를 세므로 2000년 2월 29일처럼 실제로 있는 윤년 날짜도 정상으로 계산됩니다.
일련번호에 소수점이 있으면 소수 부분이 하루 중 시각입니다. .5 는 정오, .25 는 오전 6시입니다. 이 화면은 그 시각도 함께 보여 줍니다(초 단위로 반올림합니다).
넣은 값은 서버로 가지 않는데, 계산은 브라우저 안에서 끝나고 서버가 받는 것은 화면을 열었는지와 변환이 한 번 일어났는지와 링크를 복사했는지 세 가지 사실뿐입니다. 저장도 하지 않아서 새로 고치면 지워집니다.
변환해 보기4. 기본 요령
표에서 날짜 열 하나를 통째로 복사해 왼쪽 칸에 붙여넣으면 줄마다 한 번에 바뀌는데, 줄 순서가 그대로 유지되므로 결과를 복사해 원래 표의 옆 열에 붙여 쓸 수 있습니다.
어느 체계를 써야 할지 모르겠다면 숫자 하나를 양쪽 체계로 다 바꿔 보고 현실적인 날짜(예: 최근 몇 년 안)가 나오는 쪽을 고르는데, 두 체계의 차이는 정확히 1,462일이라 한 값만 알면 반대쪽도 계산됩니다.
형식이 맞지 않는 줄은 결과 칸에 빨간 글자로 표시되며, 날짜는 2026-09-10 처럼 연-월-일 순서만 읽습니다(2026/09/10 이나 09/10/2026 같은 다른 표기는 지원하지 않습니다).
5. 조금 더 깊이
1900년 2월 29일(일련번호 60)을 날짜로 바꾸면 이 화면은 '실제로 없는 날'이라는 표시를 함께 보여 주는데, 그 숫자를 다시 날짜로 바꾼 엑셀 자신도 화면에는 2/29/1900 이라고 표시하지만 그 날은 역사적으로 존재하지 않았던 날입니다.
엑셀의 WEEKDAY 함수는 1900년 3월 1일 이전 날짜에서만 요일이 틀리게 나오며, 그 범위 밖(거의 모든 실제 업무 날짜)은 이 버그의 영향을 받지 않습니다.
날짜 계산 프로그램(파이썬의 pandas, R 등)은 보통 이 버그를 흉내 내지 않고 실제 그레고리력으로 계산하는데, 같은 엑셀 숫자를 다른 프로그램에서 날짜로 바꾸면 1900년 3월 이전 구간에서만 하루가 어긋날 수 있습니다.
6. 자주 막히는 부분
바꾼 날짜가 실제보다 하루 빠르거나 늦게 나온다면 체계를 반대로 골랐을 가능성이 큰데, 1900 체계와 1904 체계를 눌러 바꿔 보세요.
숫자가 아주 작다면(1900년대 초반의 날짜) 1900년 윤년 버그 구간에 있을 수 있는데, 이 화면은 그 구간도 엑셀과 같은 값을 내도록 맞춰져 있습니다.
날짜를 넣었는데 빨간 글자가 나온다면 연-월-일 순서와 하이픈(-) 표기를 확인하세요. 시각까지 넣으려면 날짜 뒤에 띄어쓰고 시:분 또는 시:분:초를 적습니다.
출처
- Microsoft Support: Date systems in Excel
- Microsoft Learn: Excel incorrectly assumes that the year 1900 is a leap year
확인일 2026-09-10