关于时区
环境变量TZ
(1)GTM与GMT
这里需要特别注意GTM 和 GMT并不是同一个概念。
GMT是 是Greenwich Mean Time 的缩写,及格林尼治时间。
因此,我们平时邮件头中的GMT+08:00的意义是此时间是北京时间。
GTM是一种时区表示方法,在这种时区表示方法中,东半球采用负数表示时区信息,西半球采用正数表示。
如东八区的表示方法为 GTM-8。
(2)几个常用的时间函数 (ctime(), asctime(), gmtime(), localtime(), mktime())
受时区影响的有ctime(),localtime(),mktime()。
其中,
char *ctime(const time_t *timep),返回timep参数的时间在所在时区下的时间。
struct tm *localtime(const time_t *timep),返回timep参数的时间在所在时区下的时间。
time_t mktime(struct tm *tm),返回tm参数的时间距离格林尼治时间1970年1月1日的秒数,注意该函数会先根据时区信息将tm转换成格林尼治时间,
然后再计算转换后的时间距离1970.1.1的秒数。
不受时区影响的函数有gmtime(),asctime()
其中,
struct tm *gmtime(const time_t *timep),不管当前时区是多少,该函数始终认为timep参数为格林尼治秒数,返回格林尼治时间。
char *asctime(const struct tm *tm),该函数也始终认为tm参数的时间是格林尼治时间,返回字符串形式的格林尼治时间。
(3)关于以上你个函数的安全性
char *asctime_r(const struct tm *tm, char *buf);
char *ctime_r(const time_t *timep, char *buf);
struct tm *gmtime_r(const time_t *timep, struct tm *result);
struct tm *localtime_r(const time_t *timep, struct tm *result);
官方建议用上面这几个函数替换先前的函数,原因是先前那几个函数都是返回函数内部存贮空间内存贮的值,当再次调用时,由于值发生了改变,导致先前的职业发生了改变。
阅读(1643) | 评论(0) | 转发(0) |