大家好,今天小編關注到一個比較有意思的話題,就是關于localtime的翻譯問題,于是小編就整理了2個相關介紹localtime的解答,讓我們一起看看吧。
localtime函數參數?
localtime()函數:獲取當前時間和日期并轉換為本地時間
?
返回1970-1-1, 00:00:00以來經過的秒數
原型: time_t time(time_t *calptr)
結果可以通過返回值,也可以通過參數得到,見實例
頭文件 <time.h>
返回值:
成功:秒數,從1970-1-1,00:00:00 可以當成整型輸出或用于其它函數
失?。?1
例:
time_t now;
time(&now);// 等同于now = time(NULL)
printf("now time is %d\n", now);
2. localtime函數
將時間數值變換成本地時間,考慮到本地時區(qū)和夏令時標志;
原型: struct tm *localtime(const time_t * calptr);
頭文件 <time.h>
返回值:
成功: struct tm *結構體, 原型如下:
struct tm {
int tm_sec; /* 秒 – 取值區(qū)間為[0,59] */
int tm_min; /* 分 - 取值區(qū)間為[0,59] */
int tm_hour; /* 時 - 取值區(qū)間為[0,23] */
int tm_mday; /* 一個月中的日期 - 取值區(qū)間為[1,31] */
int tm_mon; /* 月份(從一月開始,0代表一月) - 取值區(qū)間為[0,11] */
int tm_year; /* 年份,其值等于實際年份減去1900 */
int tm_wday; /* 星期 – 取值區(qū)間為[0,6],其中0代表星期天,1代表星期一 */
int tm_yday; /* 從每年1月1日開始的天數– 取值區(qū)間[0,365],其中0代表1月1日 */
int tm_isdst; /* 夏令時標識符,夏令時tm_isdst為正;不實行夏令時tm_isdst為0 */
};
1. localtime函數的參數是一個指向time_t類型的指針。
2. 這是因為time_t類型是表示從1970年1月1日0時0分0秒到現在的秒數,而localtime函數的作用是將這個秒數轉換為本地時間,所以需要傳入time_t類型的指針。
3. localtime函數還有一個類似的函數gmtime,它的參數也是一個指向time_t類型的指針,但是它將時間轉換為格林威治標準時間。
為什么localtime函數是線程不安全的?
從localtime函數的原型定義分析
struct tm *localtime(const time_t *timep);
localtime函數返回了一個struct tm指針,函數的說明中并未要求調用者將該指針free掉,證明tm對象并非是malloc或new出來的。那么tm一定是個全局變量或者是localtime函數中的局部靜態(tài)變量。
這樣的變量在多線程訪問時會出問題,第一個線程在localtime返回之前首先改變了這個變量的值,第二個線程又進來改變這個變量,以此類推。這樣第一個線程在真正返回時該值已經被多次改變,這是典型的函數重入問題。
因此localtime函數線程不安全。
到此,以上就是小編對于localtime的翻譯問題就介紹到這了,希望介紹關于localtime的2點解答對大家有用。