2011-09-09 69 views
0

這特別適用於C中的gmtime()函數,雖然如果它的時間與我想知道的其他時間函數相比有所不同。C時間函數是否依賴於系統時鐘?

如果我改變系統時間會不會搞砸了?它會得到錯誤的時間嗎?

+3

您認爲系統將會在哪裏獲得時間從? – geoffspear

+0

我不知道,也許是像原子鐘那樣的幻想。 :< – lightburst

+0

C標準要求gmtime使用內部時鐘嗎?你可以使用互聯網時鐘! – xanatos

回答

1

是的。它們取決於系統時鐘的值。如果您更改系統時鐘,您將得到不同的結果,因爲這是獲得當前系統時間的唯一方式(除非使用NTP之類的東西,但在任何C/C++標準庫中都找不到)。

1

在窗口上,time函數調用GetSystemTimeAsFileTime,並進行一些簡單的計算以將其轉換爲CRT時間格式(自UTC 1970年1月以來的秒數)。其他時間功能(例如gmtime)不能直接在系統時間上運行;他們只是在不同的格式之間進行轉換 - 通常是通過調用time獲得的格式。

0

由於簽名,顧名思義:

struct tm * gmtime (const time_t * timer); 

該函數將time_t的以TM作爲UTC時間。請記住,要使用定時器指向的值來填充表示相應時間的值的tm結構,以UTC(或GMT時區)表示。

#include <stdio.h> 
#include <time.h> 


int main() 
{ 
    time_t rawtime; 
    struct tm * ptm; 

    time (&rawtime); 

    ptm = gmtime (&rawtime); 

    return 0; 
} 
+0

哦,對,重新檢查代碼,你是正確的。這是一個我試圖改進的舊應用程序。我的錯。 – lightburst

0

是的,有幾個是,一個特別的一個,我能想到的是,如果系統時鐘未初始化了POSIX Pthread的功能那麼pthread_cond_timedwait()將無法工作。您需要了解所有功能如何表現的細微差別以及它們如何取決於系統的時間和區域設置以及系統的時鐘漂移......

相關問題