mktime()을 호출하면 2 월 1 일이 1 월 31 일 이전 인 것으로 보입니다. 왜입니까? 내가 잘못했거나 glibc의 버그입니까?Linux-x64 glibc : 2 월 1 일이 1 월 31 일 전인 이유는 무엇입니까?
여기에 코드입니다 :
struct tm tm;
time_t tt;
memset(&tm, 0, sizeof(tm));
tm.tm_year = 2011;
tm.tm_mon = 1;
tm.tm_mday = 31;
tm.tm_hour = 11;
tm.tm_min = 41;
tm.tm_sec = 28;
tm.tm_isdst = 0;
tt = mktime(&tm);
printf("Time now %d-%d-%d %d:%d:%d (%s) = %lu\n",
tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_zone, tt);
memset(&tm, 0, sizeof(tm));
tm.tm_year = 2011;
tm.tm_mon = 2;
tm.tm_mday = 1;
tm.tm_hour = 1;
tm.tm_min = 1;
tm.tm_sec = 1;
tm.tm_isdst = 0;
tt = mktime(&tm);
printf("Time now %d-%d-%d %d:%d:%d (%s) = %lu\n",
tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec, tm.tm_zone, tt);
그리고 여기에 출력입니다 :
Time now 2011-2-3 11:41:28 (PST) = 61257325288
Time now 2011-2-1 1:1:1 (PST) = 61257114061
참고 원래의 의도는 두 써서 time_t의를 비교했다. 이 문제로 인해 첫 번째 날짜/시간이 두 번째 시간보다 늦어지는 것으로 나타납니다. 이는 분명히 약간의 문제입니다.
이것은 "gcc test.c"로 컴파일되고 우분투 9.10, gcc 버전 4.4.1 (Ubuntu 4.4.1-4ubuntu8), libc-2.10.1-0ubuntu15에서 "./a.out"
32 비트 시스템에서 결과는 예상대로입니다 - 즉 64 비트 결과와 완전히 다릅니다!
누구든지이 결과를 확인/반박하고 내가 잘못하고있는 것에 대해 통찰력을 주겠습니까?
단순히 2 월 31 일 (실제로 3 월 3 일 또는 3 월 2 일)은 3 월 1 일 이후입니다. – grep
짐 순간 - 비트의 비트) 내가 여러 번 RTFM을 실행 한 후 어떻게보고 싶었는지 확실하지 않습니다! –
@Paul - 우리 모두는 그 순간을 가지고 있습니다 - 나는 기억해야 할 것보다 더 많은 것을 가지고 있습니다 :-) –