C函數之localtime_r()

問題描述:

localtime_r()函數在一個進程生命週期中,當系統time zone改變時,localtime_r()返回的時間與系統實際時間有誤差

 

造成這個現象的原因:

localtime_r不會使用系統time zone設定全局變量 tzname, timezone 和daylight的值,這三個變量被用來校正格林威治(UTC) 時間爲本地時間。當系統time zone在進程週期內改變時,全局變量tzname timezone和daylight卻沒有被刷新,所以返回的時間還是以原來的timezone計算。

 

修改建議:

在調用localtime_r()並且系統time zone 有可能中途被修改的情況下,先調用tzset()來強制刷新時區信息.

 

struct tm *sc_localtime_r(cont time_t *t, struct tm *tp)

{

tzset();

return localtime_r(t, tp);

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章