大家好,今天小编关注到一个比较有意思的话题,就是关于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函数
将时间数值变换成本地时间,考虑到本地时区和夏令时标志;
原型: struct tm *localtime(const time_t * calptr);
头文件 <time.h>
返回值:
成功: struct tm *结构体, 原型如下:
struct tm {
int tm_sec; /* 秒 – 取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值等于实际年份减去1900 */
int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 */
int tm_yday; /* 从每年1月1日开始的天数– 取值区间[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函数中的局部静态变量。
这样的变量在多线程访问时会出问题,第一个线程在localtime返回之前首先改变了这个变量的值,第二个线程又进来改变这个变量,以此类推。这样第一个线程在真正返回时该值已经被多次改变,这是典型的函数重入问题。
因此localtime函数线程不安全。
到此,以上就是小编对于localtime的翻译问题就介绍到这了,希望介绍关于localtime的2点解答对大家有用。