2012-08-29 131 views
1

我正在使用C應用程序的time(NULL)函數來獲得自1970年以來我已經注意到,它返回用1小時的時差信息的秒。「夏令時」,在DOS

然後我試圖將結果轉換爲tm結構使用localtime,然後我注意到tm_isdst字段正在設置。

的代碼是這樣的:

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); 

在第一printftempo是爲打印與差的一小時。第二,它打印正確的值。

我在Ms DOS 6.0操作系統中運行應用程序,並且該應用程序正在編譯Watcom v1.3

哪裏Daylight Savings Time信息是從哪裏來的? DOS是否擁有這些信息?

+0

當我嘗試運行上的Linux的代碼,我看到的差異也是一個小時: – ldav1s

回答

0

通過清除sttime.tm_isdst,你告訴mktime它比實際情況晚了一個小時(如果你在DST中,似乎你自從你說sttime.tm_isdst已設置)。

+0

我想知道就是爲什麼它返回DST,因爲它不是DST在我所在的地區現在。 –

+0

我的猜測是,這些值可能被硬編碼到DOS(帶有時區信息一種型號的對比)。由於時區/夏令時間(由一些政府機構)被任意定義,它在你的區域定義可能會在20年左右已經改變,因爲MSDOS 6.0發佈。 – ldav1s