현재 시스템 시간에 액세스 할 수 있도록 Time 개체가 필요한 C++ 응용 프로그램을 작성하고 있습니다. 이렇게하려면 time.h
을 사용합니다. 단위 테스트 때 시간 변경을하지 못하기 때문에struct tm 'tm_isdst'플래그를 사용하는 올바른 방법입니까?
Time::Time(bool p_daylightSavingEnabled /* = true */)
{
time_t rawTime = time(nullptr);
struct tm* timeInfo = localtime(&rawTime);
timeInfo->tm_isdst = static_cast<int>(p_daylightSavingEnabled);
m_hours = timeInfo->tm_hour;
m_minutes = timeInfo->tm_min;
m_seconds = timeInfo->tm_sec;
}
모든 내가 추가 한 tm_isdst
플래그의 사용을 제외하고 꽤 정직하지만, 여전히 나에게 신비 : 내 두 생성자는 다음과 같이 이동합니다. 인터넷에서이 플래그를 올바르게 사용하는 방법에 대한 명확한 문서를 찾지 못했지만 일부 시스템에서는 사용할 수없는 (즉, 0으로 설정) 것도 없다고 들었습니다.
tm_isdst
을 사용하는 올바른 방법이며, 그렇지 않은 경우 (예 : 생성자에서) 다른 시스템에서 제대로 작동하려면 어떻게 사용해야합니까?
설명 : 지금은 time.h
의 대안에 관심이 없습니다.
아니요; 'localtime'이 반환하는 것을 봐야합니다. 당신은 더 많은 보상 적 변화없이 무시되거나 무시 될 수 있다고 주장해서는 안됩니다. 그리고 네, 일반적으로 잘못 정의되어 있습니다. –
@JonathanLeffler * 보상 적 변경없이 무시하거나 무시할 수있는 척해서는 안됩니다. * 더 많은 보상 적 변경이 있다는 것은 무엇을 의미합니까? 내가 볼 수있는 모범이 있습니까? – BobMorane
'localtime'에 대한 매뉴얼 페이지는'is_dst'의 의미를 완전히 설명합니다. 'localtime' 매뉴얼 페이지에서 그 필드에 대한 설명이 불분명하다면, 정확히 무엇이 당신에게 불분명한지 설명해야합니다. –