4、difftime函數:從日歷時間t1中減去日歷時間t0,返回double類型的差值(秒數)。
由于time_t是整型,因此代碼中如果不會導致double的舍入錯誤,就轉換成double類型,然后做減法。如果有可能導致double的舍入錯誤,則調用substract做減法。substract中,把兩個time_t參數轉換成最大長度的整數類型uintmax_t,一般都能實現無損的轉換,然后做減法,返回結果值。有一種罕見的情況即UINTMAX_MAX / 2 < INTMAX_MAX時,會導致轉換有微小的溢出,因此對這種情況要進行特殊地處理,這時獲得的結果可能是真正答案的近似值(有一個細微的舍入)。
5、gmtime,localtime,mktime:gmtime把time_t類型時間值轉換成UTC中的struct tm表示,localtime把time_t類型時間值轉換成本地時間區域中的struct tm表示,mktime根據struct tm結構指定的本地時間構造time_t類型的值。mktime由于要對tm結構的各個成員值進行分析,然后合并成time_t類型的值返回,比較復雜,代碼就不解剖了。而且不同Linux/Unix平臺上的實現有差異,需要兼容不同的平臺。核心的函數是__mktime_internal,在mktime中只是直接調用這個函數。gmtime和localtime的實現比較簡單,都是直接調用內置函數__tz_convert來完成工作,如下:
6、asctime,ctime:asctime返回tp時間(struct tm結構)的可打印格式,格式為"%a %b %d %H:%M:%S %Y/n",ctime(time_t *tp)等價于asctime(localtime(tp))。
asctime_internal是實現日歷時間輸出的核心函數。這里限制了打印的年份大小,以防年份太大而溢出,然后調用內部函數__snprintf來把時間輸出到全局的字符串result中,并返回這個字符串,格式控制字符串保存在全局的format串中。
7、strftime,wcsftime:對struct tm結構的時間進行格式化輸出,保存到字符串中。strftime函數根據控制串FORMAT對TP進行格式化,并保存到字符串S中,最多寫入MAXSIZE個字符到S中,并返回寫入的字符數,如果字符串長超過MAXSIZE,則返回0。wcsftime是對應的寬字符版本,時間會被格式化成寬字符串,在wchar.h中聲明。它們都直接調用內部函數__strftime_l和__wcsftime_l來完成工作。
新聞熱點
疑難解答
圖片精選