gcc 컴파일러를 사용하여 RedHat Linux 컴퓨터에 C 프로그램을 작성했습니다. gcc 컴파일러는 두 날짜를 입력으로 받아들이고 차이점을 계산합니다.mktime()이 이상한 날짜 변경
그러나 아래의 코드 세그먼트와 같이 mktime()
과 같이 이상한 동작이 발견되었습니다.
struct tm t;
t.tm_year=4;
t.tm_mon=9;
t.tm_mday=30;
t.tm_hour=0;
t.tm_min=0;
t.tm_sec=0;
printf("%d-%d-%d %d:%d:%d\n", t.tm_year, t.tm_mon, t.tm_day, t.tm_hour, t.tm_min, t.tm_sec);
//result: 4-9-30 0:0:0, which means 1904 Oct 30 00:00:00
mktime(&t);
printf("%d-%d-%d %d:%d:%d\n", t.tm_year, t.tm_mon, t.tm_day, t.tm_hour, t.tm_min, t.tm_sec);
//result: 4-9-29 23:36:36, which means 1904 Oct 29 23:36:36
당신이 struct tm
가 부당 보이는 mktime()
후 이동했다 볼 수 있듯이
.
많은 테스트를했는데, 이상한 동작이 1904 년 10 월 30 일 00:00:00 - 00:23:24 사이의 날짜 지정에서만 발생한다는 것을 알았습니다.
게다가, 나는 유닉스 서버 (HP-UX)에서 동일한 코드를 테스트했으며, 아무런 변화없이 완벽하게 실행된다.
누가 비슷한 경험을했는지 궁금합니다. 어떤 일이 벌어지고 있는지에 대한 힌트를 줄 수 있습니까?
저는 홍콩 시간대를 사용하고 있습니다.
시간대가 무엇입니까? –
'아시아/홍콩'및 다른 홍콩 시간대에 대해서만 이것을 재현 할 수 있습니다. – Frxstrem
'tm_day를'tm_day로 철자가 잘못되었습니다. 실제 컴파일 가능한 코드를 복사하여 붙여 넣는 것이 항상 (거의) 가장 좋습니다. –