문제

구식 C ++ MFC 프로그램의 버그에서 발견 된 기본 날짜의 주어진 날짜에 대한 오프셋 (일)을 계산합니다. 우리는 어떤 이유로 든 결과를보고 있었고, 원래 프로그래머가 ctimesspan.getdays () 메소드를 사용한 곳으로 추적했습니다. 에 따르면 선적 서류 비치:

일광 절약 시간은 행해들이 잠재적으로 놀라운 결과를 되 돌릴 수 있습니다. 예를 들어, DST가 적용되는 경우, GetDays는 4 월 1 일이 1 시간이 짧아서 완전한 날로 계산되지 않기 때문에 4 월 1 일에서 5 월 1 일 사이의 29 일 (30)이 아닌 29 세의 일을보고합니다.

제가 제안 된 수정 사항은 사용하는 것입니다 (obj.GetTotalHours()+1)/24 대신에. 나는 이것이 매일 거의 같은 시간에 실행되는 배치 작업이기 때문에 모든 문제를 다룰 것이라고 생각하지만, 더 나은 방법이 있다면 구현하기 전에 스마트 사람들에게 물어볼 것이라고 생각했습니다.

이것은 단지 부수적 인 문제 일 뿐이지 만 프로그램을 언제든지 실행할 수 있다면 어떻게 처리 될지 궁금합니다.

도움이 되었습니까?

해결책

이벤트가 매일 동시에 발생하는 한 2 배 사이의 전체 24 시간의 수를 얻기 위해 수정이 제대로 작동합니다. 그렇지 않으면 표현식에서 "+1"이 하나의 오류로 이어질 수 있습니다.

때로는 이벤트가 언제 발생했는지 신경 쓰지 않아도 하루를 알고 싶습니다. 이 경우 시간, 몇 분 및 초를 0으로 제외하고 공식을 사용해야합니다.

CTime startDay(start.GetYear(), start.GetMonth(), start.GetDay(), 0, 0, 0);
CTime finishDay(finish.GetYear(), finish.GetMonth(), finish.GetDay(), 0, 0, 0);
int days = ((finishDay - startDay).GetTotalHours() + 1) / 24;

다른 팁

마크가 제안한 것에 대한 사소한 변화와 반올림에 의존하지 않고 작동합니다. CTime 건설자. 이로 인해 두 번 모두 표준 시간이되도록 강요합니다 (일광 절약이 아님). 해당 매개 변수의 기본값은 -1이므로 "일광 절약 시간이 유효 한 경우 자동으로 계산합니다"를 의미합니다.

// Discard hours, minutes, seconds, and daylight savings time
CTime startDay(start.GetYear(), start.GetMonth(), start.GetDay(), 0, 0, 0, 0);
CTime endDay(end.GetYear(), end.GetMonth(), end.GetDay(), 0, 0, 0, 0);

// Get number of days apart
CTimeSpan span = endDay - startDay;
int nDays = span.GetDays();

테스트 및 작업.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top