CodeSOD: 부정적인 날들
.NET의 TimeSpan 구조체 소스 코드에는 해당 기능에 대한 설명을 담은 주석이 포함되어 있습니다. TimeSpan은 양수 또는 음수일 수 있는 기간을 나타냅니다. 내부적으로는 밀리초 단위로 저장됩니다. 이 표현 방식은 시간이나 일과 같은 단위에는 잘 작동하지만, 더 긴 기간에는 부정확해집니다. 예를 들어, 월은 28일에서 31일까지 길이가 다양할 수 있습니다. 마찬가지로, 1년은 365일 또는 366일이 될 수 있으며, 10년에는 1개에서 3개의 윤년이 포함될 수 있습니다. 이러한 불일치 때문에 TimeSpan 구조체는 연도 또는 월에 대한 메서드를 제공하지 않습니다. 연도에 대해 언급된 "364일"은 작성자가 "fat-finger typo"라고 부르는 사소한 오류이며 코드의 동작에는 영향을 미치지 않습니다. 이 주석은 12년 동안 변경 없이 코드에 그대로 남아 있었습니다. 본질적으로 밀리초 래퍼인 TimeSpan 클래스 자체도 변경된 바가 없습니다. 월 또는 연도를 더하는 것과 같은 더 복잡한 날짜 계산은 다른 날짜-시간 객체에서 처리됩니다. 큰 문제는 아니지만, 주석과 클래스의 역사는 주목할 만합니다. TimeSpan 클래스는 또한 사용 중단된 생성자와 Silverlight를 포함한 이전 .NET 버전에 대한 컴파일 타임 지원을 보여줍니다. 이미 사라진 기술인 Silverlight는 이 클래스의 오랜 존재감을 강조합니다.