Linux时间操作

         在嵌入式开发平台中,经常会用到Linux时间函数的一些操作,包括时间戳的读取、时间格式的转换等,以下是Linux时间操作中重要的函数及结构体的说明。


重要结构体:

struct tm 

{

           int tm_sec;         /* seconds */

           int tm_min;         /* minutes */

           int tm_hour;        /* hours */

           int tm_mday;       /* day of the month */

           int tm_mon;         /* month */

           int tm_year;        /* year  从1900年算起至今的年数*/

           int tm_wday;        /* day of the week * 周一开始,0-6/

           int tm_yday;        /* day in the year */

           int tm_isdst;       /* daylight saving time */

         };

 

相关函数:

time() 获取时间戳

函数原型: time_t time( time_t  *t )

说明:返回从197011000秒起到此时锁经过的秒数(t非空,则同时也保存到t指向的内存)

例:

time_t timep; // 创建time_t 变量

time(&timep); // 获取时间戳


localtime() 时间戳 -> tm结构体

函数原型: struct tm *localtime(const time_t  *timep);

说明:将由time函数获取到的时间戳的值转换为时间日期表示方法,以结构体tm返回。

例:

time_t current;

struct tm *timeinfo;

time(¤t);

timeinfo = localtime(¤t);

PSlocaltime函数在多线程中是不安全的,或在同个流程中被重复调用时,之前调用的结果会被改写。因此在多线程编程中,可以使用localtime_r函数。


localtime_r() 时间戳 -> tm结构体

函数原型: struct tm *localtime_r(const time_t  *timep,struct tm  *result);

说明:功能与localtime相同,但在多线程中可以安全使用。

例:

time_t current;

struct tm result = {0}; 

time(¤t);

localtime_r(¤t,&result);


gmtime() 时间戳 -> tm结构体

函数原型: struct tm *gmtime(const time_t  *timep);

说明:将由time函数获取到的时间戳的值转换为格林威治时间,以结构体tm返回。

例:

struct tm *p;

time_t timep;

time(&timep);

p = gmtime(&timep);

PSlocaltime()类似,在多线程编程中,使用gmtime_r()函数较安全。


asctime() tm结构体 -> 时间字符串

函数原型: char *asctime(const struct tm  *tm);

说明:tm结构体的时间转换为字符串返回

例:

struct tm *p;

time_t timep;

time(&timep);

p = gmtime(&timep);

printf(The time is %s\n,asctime(p));


ctime() 时间戳 -> 时间字符串

函数原型: char *ctime(const time_t *timep);

说明: time_t指向的数据转换为字符串返回

例:

time_t timep; // 创建time_t 变量

printf(The time is %s\n,ctime(timep));

PSlocaltime()类似,在多线程编程中,使用ctime_r()函数较安全。


mktime() tm结构体 -> 时间戳

函数原型: time_t mktime(struct tm *tm)

说明:tm结构体转换为时间戳



程序示例:

   
   
  1. #include<time.h>    
  2. //获取系统当前时间
  3. time_t tim;
  4. time(&tim);//得到的tim是一个long,需要转化为字符串
  5. //把当前系统时间转化为字符串
  6. char *p = ctime(&tim);
  7. printf("%s\n", p);
  8. //转换为具体时间
  9. struct tm *alltime = gmtime(&tim);
  10. printf("%d:%d:%d\n", alltime->tm_year+1900,//得到的tm_year是比1900多的年份数目,因此要加1900
  11. alltime->tm_mon+1,//tm_mon : 0~11 所以要+1
  12. alltime->tm_mday);
  13. //时间打包
  14. char buf[128];
  15. sprintf(buf,"%d-%d-%d %d:%d:%d", alltime->tm_year+1900,
  16. alltime->tm_mon+1,
  17. alltime->tm_mday,
  18. alltime->tm_hour+8,
  19. alltime->tm_min,
  20. alltime->tm_sec);




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值