Centos系统下载大全 | Redhat系统下载大全 | Windows2012系统下载大全 | Windows2008系统下载大全| CMS教程 | 网站地图 51运维网-专注Linux/Unix系统安全运维!
当前位置:51运维网 > 内核 > Linux内核 > 正文

Linux下时间编程

时间:2016-05-31 21:39 来源:网络整理 作者:51ou.com 阅读:

一、说明

一般Linux下提供的时间服务都是从国际标准时间公元1970年1月1日00:00:00以来经过的秒数,这种类型用time_t表示,一般我们称之为日历时间,这是我们要用的源。


二、获取系统时间并转成字符串步骤

#include <time.h> 
time_t time(time_t *calptr); 

time函数总是以NULL为参数,返回的是当前的时间和日期,也就是从1970年1月1日00:00:00以来经过的秒数,也叫日历时间。

#include <sys/time.h> 
int gettimeofday(struct timeval *tv, struct timezone *tz); 

gettimeofday比time提供了更高的分辨率,可以精确到微妙,时间值保存到timeval结构中,tz唯一有效的值是NULL,其他的值将产生不确定的结果。

struct timeval  


time_t      tv_sec;     /* seconds,也是日历时间 */ 
suseconds_t tv_usec;    /* microseconds */ 
}; 

拿到日历时间后,可以使用localtime或者gmtime来转成以年月日时分秒表示的时间,但是这个时间是保存到一个结构里,当然也可以使用ctime直接转成我们熟悉的字符串形式。

struct tm *gmtime(const time_t *timep); 
struct tm *localtime(const time_t *timep); 

char *ctime(const time_t *timep); 

tm的结构如下:

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 */ 
int tm_wday;        /* day of the week */ 
int tm_yday;        /* day in the year */ 
int tm_isdst;       /* daylight saving time */ 
}; 

还有一个函数可以把tm结构反转为日历时间:mktime

time_t mktime(struct tm *tm); 

获得了tm结构的时间,也可以转成我们熟悉的字符串形式来表现:asctime

char *asctime(const struct tm *tm); 

参数tm为所获得的时间结构,返回的是一个字符串。


三、代码举例

/*sample.c*/ 
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <string.h> 
#include <sys/time.h>   /*用于gettimeofday,精确到微妙级别*/ 
int main(void) 

time_t t; 
struct tm *mytm; 
struct timeval myval; 
char *buf; 
buf = malloc(30); 
mytm = malloc(sizeof(struct tm)); 
bzero(&myval, sizeof(myval)); 
t = time(NULL);/*获取日历时间*/ 
buf = ctime(&t);/*把日历时间直接转成字符串形式*/ 
printf("ctime out:%s\n", buf); 
//mytm = localtime(&t);/*localtime把日历时间转成tm结构形式*/ 
mytm = gmtime(&t);/*gmtime把日历时间转成tm结构形式*/ 
buf = asctime(mytm);/*转成字符串形式*/ 
printf("asctime out:%s\n", buf); 
gettimeofday(&myval, NULL); 
printf("t = %ld, seconds:%ld, microseconds:%ld\n", t, myval.tv_sec, myval.tv_usec); 
return 0;    

输出结果如下:

root@ubuntu:/media/work/test/time# ./sample 
ctime out:Wed Dec  3 09:39:11 2016 
asctime out:Wed Dec  3 01:39:11 2016 
t = 1417570751, seconds:1417570751, microseconds:11031 
root@ubuntu:/media/work/test/time#  

可以看到t和seconds是相同的,但是gettimeofday却能精确到微妙级别,在很多高精度的场合里具有很高的价值。


本文永久更新地址:

感谢您对【51运维网 http://www.51ou.com/】的支持,我们为您免费提供《Linux下时间编程》技术文章,《Linux下时间编程》详细使用和说明,有时《Linux下时间编程》可能不完善、敬请谅解!如果《Linux下时间编程》有错误请给我们留言,我们将尽快修复文章错误,如果您觉得本站不错,请分享给周围的朋友!谢谢!

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
验证码:点击我更换图片