std::gmtime
은 최대 std::time_t
을 전달하면 실패합니다.std :: tm 또는 std :: gmtime의 한계는 무엇입니까?
std::cout << "sizeof(std::time_t): " << sizeof(std::time_t) << '\n'
<< "sizeof(long long): " << sizeof(long long) << '\n'
<< "sizeof(unsigned int): " << sizeof(unsigned int) << "\n\n";
auto testgmtime = [](std::time_t time)
{
std::tm* ptm = std::gmtime(&time);
std::cout << (ptm ? "succeeded\n" : "failed\n");
};
testgmtime(std::numeric_limits<std::time_t>::max());
testgmtime(std::numeric_limits<long long>::max());
testgmtime(std::numeric_limits<long long>::max()-1);
testgmtime(static_cast<std::time_t>(std::numeric_limits<unsigned int>::max())*2);
testgmtime(std::numeric_limits<int>::max());
출력 : 내가 VS2012를 사용하고
sizeof(std::time_t): 8
sizeof(long long): 8
sizeof(unsigned int): 4
failed
failed
failed
succeeded
succeeded
다음 테스트를 참조하십시오. 표준 제한이 보이지 않습니까? 아니면이 VS가 엉터리입니까? 어떤 대안을 사용할 수 있습니까? ?
감사합니다. 매우 높은 숫자를 설명합니다. 그러나''(std :: numeric_limits :: max() - 1)/10000000'도 역시 ~ 29247years의 범위가 될 것이므로 2924 년의 범위를 가지며 결국에는 292 개의 작업 범위를 벗어납니다. 나는 정확히 어디에서 멈출 지 모르지만이 일은 ~ 300 년 ~ 3000 년 사이에 실패합니다. 나는 당신이 제안한 것처럼 내 자신을 써야한다고 생각한다. –
David
바이너리 검색을하여 컷 - 오프 날짜/시간을 결정할 수있다. 나는 그것이 무엇인지 알고 싶어합니다. 그것은 논리를 나타낼 수 있습니다. –
~ 300 ~ 3000 년은 33 비트에서 37 비트가 소요됩니다. 나는'time_t'가 64 비트 임에도 불구하고 (기본적으로'time_t' 크기를 선택할 수 있음) 구현이 기본적으로 32 비트인지 궁금합니다. –