linux 常用时间函数及时间类型

参照:http://www.linuxdiyf.com/viewarticle.php?id=81130

常用的数据类型

time_t                          一般用来存储国际化时间,用time()函数可直接获取到;

结构体:tm                 一般用来存储本地时间,可通过将time_t格式转化而来;

结构体:time_val        一般用来存储计数型的时间(秒/毫秒);

有些也用struct tim,但好像不如time_val好用。

常用的时间函数及头文件

包含头文件:#include <time.h>

1. 功能:将时间转化为字符

char *asctime(const struct tm *tm);

char *asctime_r(const struct tm *tm, char *buf);

char *ctime(const time_t *timep);

char *ctime_r(const time_t *timep, char *buf);

2. 功能:将time_t类型转为tm结构体,即转化为格林尼治时间

struct tm *gmtime(const time_t *timep);

struct tm *gmtime_r(const time_t *timep, struct tm *result);

3. 功能:将国际时间转为本地时间

struct tm *localtime(const time_t *timep);

struct tm *localtime_r(const time_t *timep, struct tm *result);

time_t mktime(struct tm *tm);

4. 功能:计算时间差

double difftime(time_t time1, time_t time0);

包含头文件:#include <sys/time.h>

5. 功能:获取时间

int gettimeofday(struct timeval *tv, struct timezone *tz);

6. 功能:设置时间

int settimeofday(const struct timeval *tv, const struct timezone *tz);

获取系统时间

1.可以用localtime()函数分别获取年月日时分秒的数值。

在所有的UNIX下,都有个time()的函数;
格式:time_t time(time_t *t);
这个函数会传回格林尼治时间,如果t是non-null,它将会把时间值填入t中

示例:

[cpp]  view plain copy
  1. <span style="font-size:10px;">#include <time.h>  
  2. #include <stdio.h>  
  3.   
  4. int main()  
  5. {  
  6.     time_t now;  
  7.     struct tm * timenow;  
  8.   
  9.     time(&now);  
  10.     //printf("International time is %s\n", ctime(&now));  
  11.     printf("International time is %s\n", asctime(gmtime(&now)));  
  12.     timenow=localtime(&now);  
  13.     printf("Local time is %s\n", asctime(timenow));  
  14. }</span>  

说明:

time()函数读取现在的时间(国际标准时间,而非北京时间),然后传值给now;

localtime()函数将国际标准时间转化为本地时间(本地所设地区),返回结果给timenow;

asctime()函数将tm结构体类型的转化为字符;

2. 可以用gettimeofday()函数获取精确时间(精确到毫秒)

对某些需要较高精准度的需求,Linux提供了gettimeofday()。

格式:int gettimeofday(struct timeval * tv,struct timezone *tz);

其中,第一个参数用来返回信息,第二个参数一般设为0(指针可直接赋0,linux下的特色);

gettimeofday()会把目前的时间有tv所指的结构返回,本地时区信息(一般没什么用,设为0)则放到tz所指的结构中。

示例:

[cpp]  view plain copy
  1. <span style="font-size:10px;">#include <stdlib.h>  
  2. #include <sys/time.h>  
  3. #include <stdio.h>  
  4.   
  5. bool time_subtract(struct timeval * result, struct timeval * x, struct timeval * y)  
  6. {  
  7.     if(x->tv_sec<y->tv_sec)  
  8.         return false;  
  9.     result->tv_sec=x->tv_sec-y->tv_sec;  
  10.     result->tv_usec=x->tv_usec-y->tv_usec;  
  11. }  
  12.   
  13. int main()  
  14. {  
  15.     struct timeval start, stop, diff;  
  16.     gettimeofday(&start, 0);  
  17.   
  18.     for(int i=0; i<10000000; i++)  
  19.     {}  
  20.     gettimeofday(&stop, 0);  
  21.   
  22.     time_subtract(&diff, &start, &stop);  
  23.   
  24.     printf("共用时%d ms\n",diff.tv_usec);  
  25. }</span>  

附加:

1. 结构体:tm

struct tm 

int tm_sec; 
int tm_min; 
int tm_hour; 
int tm_mday; 
int tm_mon; 
int tm_year; 
int tm_wday; 
int tm_yday; 
int tm_isdst; 
}; 
tm_sec表「秒」数,在[0,61]之间,多出来的两秒是用来处理跳秒问题用的。 
tm_min表「分」数,在[0,59]之间。 
tm_hour表「时」数,在[0,23]之间。 
tm_mday表「本月第几日」,在[1,31]之间。 
tm_mon表「本年第几月」,在[0,11]之间。 
tm_year要加1900表示那一年。 
tm_wday表「本第几日」,在[0,6]之间。 
tm_yday表「本年第几日」,在[0,365]之间,闰年有366日。 
tm_isdst表是否为「日光节约时间」。

2. 结构体:timeval

struct timeval

int tv_sec; 
int tv_usec; 
}; 

tv_sec表示从凌晨开始算起的秒数;

tv_usec表示从凌晨算起的毫秒数;


转自:http://blog.csdn.net/xiaobai1593/article/details/6680770


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值