以下是time.h
#if (NGX_SOLARIS)//看上去是返回时区,不太清楚为什么 #define ngx_timezone(isdst) (- (isdst ? altzone : timezone) / 60) #else #define ngx_timezone(isdst) (- (isdst ? timezone + 3600 : timezone) / 60)//时区设置 #endif #define ngx_gettimeofday(tp) (void)gettimeofday(tp, NULL); //获得当前精准时间 #define ngx_usleep(ms) (void) usleep(ms*1000) //挂起一段时间,毫秒级 #define ngx_sleep(s) (void) sleep(s) //同上,秒级
以下是time.c
void ngx_timezone_update(void){//设置时区 #if(NGX_FREEBSD) if(getenv('TZ')){//试图从环境变量“TZ”中获取时区,如果TZ环境变量存在,即getenv("TZ")返回值不为NULL return; } putenv('TZ=UTC');//设置时区, 以下是freebsd的标准设置时区办法,官方有文档说明 tzset();//初始化各类时间的全局变量,时间兼容函数 unsetenv('TZ');//还原系统时区变量 tzset(); #elif(NGX_LINUX) time_t s; struct tm *t; char buf[4]; s = time(0); t = localtime(&s);//将日历时间转化成一个结构 strftime(buf, 4, "%H", t);//将时间格式化保存在buf里面4个字符长度 #endif } void ngx_localtime(time_t s, ngx_tm_t *tm)//将时间戳格式化成时间结构 { #if (NGX_HAVE_LOCALTIME_R) (void) localtime_r(&s, tm);//localtime_r与localtime的区别是,前者可以重入,而后者一次只会有一个结果 //参考 http://blog.csdn.net/maocl1983/article/details/6221810 #else ngx_tm_t *t; t = localtime(&s); *tm = *t; #endif tm->ngx_tm_mon++;//月份要加1 tm->ngx_tm_year += 1900;//年份要加1900 } void ngx_libc_localtime(time_t s, struct tm *tm)//同上,但没有处理月份和年份 { #if (NGX_HAVE_LOCALTIME_R) (void) localtime_r(&s, tm); #else struct tm *t; t = localtime(&s); *tm = *t; #endif } void ngx_libc_gmtime(time_t s, struct tm *tm)//gmtime标准时间,time本地时间 { #if (NGX_HAVE_LOCALTIME_R) (void) gmtime_r(&s, tm);//gmtime_r()数据存储到用户提供的结构体中 #else struct tm *t; t = gmtime(&s); *tm = *t; #endif }