2012-08-29 2 views
1

저는 C 응용 프로그램에서 time(NULL) 함수를 사용하여 1970 년 이래로 초를 얻었습니다. 차이점이 1 시간 인 정보가 반환되고있는 것으로 나타났습니다.DOS의 "일광 절약 시간"

그런 다음 localtime을 사용하여 결과를 tm 구조로 변환하려고 시도한 다음 tm_isdst 필드가 설정되는 것으로 나타났습니다.

코드는 다음과 같다 : 처음에 printf

time_t tempo; 
struct tm sttime; 

memset(&sttime, 0, sizeof(sttime)); 

tempo = time(NULL); 

printf("%d\n", tempo); 

sttime = *(localtime(&tempo));  
sttime.tm_isdst = 0; 
tempo = mktime(&sttime); 

printf("%d\n", tempo); 

, tempo는 한 시간 차이로 인쇄되고있다. 두 번째에서는 올바른 값을 인쇄하고 있습니다.

Ms DOS 6.0 OS에서 응용 프로그램을 실행 중이고 응용 프로그램이 Watcom v1.3으로 컴파일되고 있습니다.

여기에서 오는 정보는 Daylight Savings Time입니까? DOS가이 정보를 보유하고 있습니까?

+0

Linux에서 코드를 실행하려고하면 1 시간 차이가 있습니다. – ldav1s

답변

0

sttime.tm_isdst을 삭제함으로써 당신은 (당신이 sttime.tm_isdst이 설정되어 말 때문에 당신은 것 같다 DST, 인 경우)가 시간이 실제보다 나중에 있다는 mktime을 말하는 것입니다.

+0

현재 내 지역의 DST가 아니기 때문에 DST를 반환하는 이유가 궁금합니다. –

+0

제 생각에이 값은 DOS로 하드 코드 된 것일 수 있습니다 (zoneinfo 종류의 모델과 대조). MSDOS 6.0이 출시 된 이후로 시간대/일광 절약 시간이 임의로 (일부 정부 기관에서) 정의되었으므로 해당 지역의 정의가 20 년이 지나면 변경되었을 수 있습니다. – ldav1s