1900 년에 Excel 평일이 왜 잘못됩니까?


27

이 질문은 Excel에서 요일 이름을 셀로 가져 오는 방법대한 답변 에서 AdamV 의 관찰을 기반으로합니다 .

A1의 값이 2009-08-01이면

  • =WEEKDAY(A1) 얻을 것이다 7
  • =TEXT(7, "dddd") 얻을 것이다 Saturday
  • =TEXT(7,"dddd, yyyy-mm-dd") 얻을 것이다 Saturday, 1900-01-07
  • =TEXT(1,"dddd, yyyy-mm-dd") 얻을 것이다 Sunday, 1900-01-01
  • =TEXT("1900-01-01","dddd, yyyy-mm-dd") 또한 얻을 것이다 Sunday, 1900-01-01

마지막 두 가지가 잘못되었습니다. 1900 년 1 월 1 일은 실제로 월요일입니다.
다양한 출처에서 다음을 확인하는 것 같습니다.

내가 무엇을 놓치고 있습니까? Excel이 왜 잘못하고 있습니까?


1
이 질문 덕분에 1/1/1900이 일요일이 아니라는 것을 분명히하기 위해 이전 답변을 약간 바꿔 보았습니다. 그러나 Excel은 생각합니다. 부정확도는 이전 답변의 내용을 변경하지 않습니다. 즉, 요일 번호를 기준으로 사용하여 날짜처럼 보이도록 서식이 지정된 텍스트를 생성하는 것은 결함이 있고 불필요합니다.
AdamV

답변:


40

Microsoft KB 214058에 설명 된 대로 :

1900 년 3 월 1 일 이전의 요일이 Excel에서 올바르지 않습니다.

추가 정보

Microsoft Excel에서 날짜 시스템을 처음 만들었을 때 다른 스프레드 시트 프로그램에서 사용하는 날짜 시스템과 완전히 호환되도록 설계되었습니다.

그러나이 날짜 체계에서 1900 년은 윤년으로 잘못 해석됩니다. 1900 년 2 월 29 일 ( "휴일")이 없기 때문에 1900 년 3 월 1 일 이전의 날짜 ( "휴일"다음 날)의 요일이 올바르게 계산되지 않습니다.

"다른 스프레드 시트 프로그램"은 그 당시 꽤 인기가 있었고 1900 년이 윤년이라고 잘못 가정 한 Lotus 1-2-3을 참조합니다 . 자세한 내용은 KB 214326에 자세히 설명되어 있습니다 .

Excel 2000에서 1900 년이 윤년이라고 잘못 가정

추가 정보

Lotus 1-2-3이 처음 릴리스되었을 때이 프로그램은 1900 년이 실제로 윤년이 아니라도 윤년이라고 가정했습니다. 이로 인해 프로그램이 윤년을보다 쉽게 ​​처리 할 수있게되었으며 Lotus 1-2-3의 거의 모든 날짜 계산에 해를 끼치 지 않았습니다.

그들은 Microsoft Multiplan과 Microsoft Excel이 출시되었을 때 1900 년이 윤년이라고 가정했습니다. 이 가정을 통해 Microsoft Multiplan 및 Microsoft Excel은 Lotus 1-2-3에서 사용하는 것과 동일한 일련 날짜 시스템을 사용하고 Lotus 1-2-3과의 호환성이 향상되었습니다. 1900 년을 윤년으로 취급함으로써 사용자는 한 프로그램에서 다른 프로그램으로 워크 시트를보다 쉽게 ​​옮길 수있었습니다.

현재 버전의 Microsoft Excel에서 1900 년이 윤년이라고 가정하지 않도록이 동작을 수정하는 것이 기술적으로 가능하지만 그렇게하는 단점이 장점보다 중요합니다.

이 동작을 수정하면 다음을 포함하여 많은 문제가 발생합니다.

  • 현재 Microsoft Excel 워크 시트 및 기타 문서의 거의 모든 날짜가 하루 단축됩니다. 이 변화를 수정하려면 특히 날짜를 사용하는 수식에서 상당한 시간과 노력이 필요합니다.
  • WEEKDAY 함수와 같은 일부 함수는 다른 값을 반환합니다. 이로 인해 워크 시트의 수식이 제대로 작동하지 않을 수 있습니다.
  • 이 동작을 수정하면 Microsoft Excel과 날짜를 사용하는 다른 프로그램 간의 일련 날짜 호환성이 손상됩니다.

문제가 해결되지 않으면 한 가지 문제 만 발생합니다.

  • WEEKDAY 함수는 1900 년 3 월 1 일 이전의 날짜에 대해 잘못된 값을 반환합니다. 대부분의 사용자는 1900 년 3 월 1 일 이전의 날짜를 사용하지 않기 때문에이 문제는 거의 없습니다.

10
다음은 Stack Exchange 자체의 Joel Spolsky 관련 내용입니다 : joelonsoftware.com/items/2006/06/16.html
matt

5
도 참조하십시오 . 많은 프로그래머들은 날짜 / 시간으로 작업하는 것이 쉽다고 잘못 가정합니다. :)
BlueRaja-Danny Pflughoeft

3
역사적 nitpicK : 1-2-3이 "대단한 인기"라고 말했을 때 그것은 한때 지배적 인 스프레드 시트 였다는 것을 의미합니다.
Isaac Rabinovitch

12

Joel이 직접 설명한 이유는 다음과 같습니다. My First BillG Review

Basic은 1899 년 12 월 31 일을 1900 년 1 월 1 일 대신 신기원으로 사용하지만 어떤 이유로 오늘 날짜는 Basic과 동일합니다.

응?

이유를 기억할만큼 나이가 든 Excel 개발자를 찾았습니다. Ed Fries가 그 답을 알고있는 것 같았습니다.

"아,"그는 말했다. "1900 년 2 월 28 일을 확인하십시오."

"59 세야"라고 말했다.

"이제 3 월 1 일을 시도하십시오."

"61입니다!"

"60은 어떻게 되었습니까?" 에드가 물었다.

"2 월 29 일. 1900 년은 윤년이었습니다. 4로 나눌 수 있습니다!"

"좋은 추측이지만 시가는 없다"고 Ed는 말했다.

죄송합니다. 나는 약간의 연구를했다. 100으로 나눌 수있는 연도는 400으로 나눌 수없는 한 윤년이 아닙니다.

1900 년은 윤년이 아니었다.

"Excel의 버그입니다!" 나는 외쳤다.

에드가 말했다. "Lotus 123 워크 시트를 가져올 수 있어야했기 때문에 그렇게해야했습니다."

"그래서 Lotus 123의 버그입니까?"

"그렇지만 의도적 일 것입니다. 로터스는 640K에 맞아야했습니다. 그것은 많은 메모리가 아닙니다. 1900을 무시하면 주어진 연도가 윤년인지 알아낼 수 있습니다. 정말 빠르고 쉽습니다 .Lotus 직원들은 아마도 과거 2 개월 동안은 문제가되지 않았다고 생각했을 것입니다.


1
@JeroenWiertPluimers : 실제로이 링크에 대한 나의 답변은 중재자에 의해 삭제되었으며 답변을 확장하기로 결정했습니다.
Giorgi

2

이에 대한 한 가지 해결책은 연도에 400 년을 더하고 다음 공식 = WEEKDAY (DATE (A4 + 400, B4, C4), 1)과 같이 요일을 계산하여 A4 = 1834 B4 = 12 C4 = 14 인 경우 이것은 1 (일요일) 2234를 반환합니다. 2234 년 12 월 14 일과 동일합니다. 그레고리력이 변경된 후 1753 년 이전 날짜의 작동이 중지됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.