linux系统时间获取,linux系统时间获取方式(示例代码)

Linux 操作系统计算系统时间:

主要函数:time  localtime  gmtime  asctime  ctime  mktime

difftime  strftime gmstrftime

1.time()函数

原型:time_t time(time_t * timer)

功能:返回一个time_t类型的数据,表示从CUT时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数.

然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,

该类型的各数据成员分别表示年月日时分秒。

2.localtime()函数

原型:struct tm *localtime(const time_t *clock);

返回值:返回指向tm 结构体的指针

功能:把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为日历时间.转换过时区!(Fri Oct 13 17:36:29 2017)

3.gmtime()函数

原型:struct tm *gmtime(long *clock);

返回值:返回指向tm 结构体的指针

功能:所指的time_t结构中的信息(从1970-1-1零点零分到当前时间系统所偏移的秒数)转换成真实世界所使用的时间日期表示

方法,为经过时区转换!比localtime小整整8小时!(Fri Oct 13 09:36:29 2017)

4.asctime()函数

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

功能:转换日期和时间为相应的字符串(如:Fri Oct 13 17:36:29 2017)

5.ctime()函数

原型:char *ctime(const time_t *time);

功能:把日期和时间转换为字符串。(如:Fri Oct 13 17:36:29 2017)

6.mktime()函数

原型:time_t mktime(strcut tm * timeptr);

功能:将所指的tm结构数据转换成从公元1970年1月1日0时0分0 秒算起至今的UTC时间所经过的秒数。

7.difftime()函数

原型:double difftime(time_t time1, time_t time0);

功能:计算时间间隔,以秒为单位,且只能精确到秒.

8.strftime()函数

原型:size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr);

功能:格式化一个时间字符串

返回值:该函数返回向strDest指向的字符串中放置的字符数。

说明:类似于sprintf():识别以百分号(%)开始的格式命令集合,格式化输出结果放在一个字符串中。

%a 星期几的简写

%A 星期几的全称

%b 月份的简写

%B 月份的全称

%c 标准的日期的时间串

%C 年份的后两位数字

%d 十进制表示的每月的第几天

%D 月/天/年

%e 在两字符域中,十进制表示的每月的第几天

%F 年-月-日

%g 年份的后两位数字,使用基于周的年

%G 年份,使用基于周的年

%h 简写的月份名

%H 24小时制的小时

%I 12小时制的小时

%j 十进制表示的每年的第几天

%m 十进制表示的月份

%M 十时制表示的分钟数

%n 新行符

%p 本地的AM或PM的等价显示

%r 12小时的时间

%R 显示小时和分钟:hh:mm

%S 十进制的秒数

%t 水平制表符

%T 显示时分秒:hh:mm:ss

%u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)

%U 第年的第几周,把星期日作为第一天(值从0到53)

%V 每年的第几周,使用基于周的年

%w 十进制表示的星期几(值从0到6,星期天为0)

%W 每年的第几周,把星期一做为第一天(值从0到53)

%x 标准的日期串

%X 标准的时间串

%y 不带世纪的十进制年份(值从0到99)

%Y 带世纪部分的十制年份

%z,%Z 时区名称,如果不能得到时区名称则返回空字符。

%% 百分号

提示:与 gmstrftime() 的行为相同,不同的是返回时间是本地时间。

9.gettimeofday()函数精确到微秒

原型:int gettimeofday(struct  timeval*tv,struct  timezone *tz )

功能:在使用gettimeofday()函数时,第二个参数一般都为空,我们一般只是为了获得当前时间,而不用获得timezone的数值

10.getSystemTime

相关类型:

1.time_t实际上是长整数类型,定义为:typedef long time_t;

2.timeval是一个结构体,在time.h中定义为:

struct timeval

{

__time_t tv_sec;                /* Seconds. */

__suseconds_t tv_usec;      /* Microseconds. */

};

其中,tv_sec为Epoch(1970-1-1零点零分)到创建struct timeval时的秒数,tv_usec为微秒数,即秒后面的零头。

3.tm是一个结构体,定义为:

struct tm

{

int tm_sec;      /*代表目前秒数,正常范围为0-59,但允许至61秒 */

int tm_min;     /*代表目前分数,范围0-59*/

int tm_hour;   /* 从午夜算起的时数,范围为0-23 */

int tm_mday;  /* 目前月份的日数,范围01-31 */

int tm_mon;   /*代表目前月份,从一月算起,范围从0-11 */

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

int tm_wday;   /* 一星期的日数,从星期一算起,范围为0-6。*/

int tm_yday;   /* Days in year.[0-365] */

int tm_isdst;   /*日光节约时间的旗标DST. [-1/0/1]*/

};

测试代码:

time:

#include

#include

int main()

{

time_t t;

t=time(NULL);

printf("the number of seconds since 1970-01-01 00:00 is:%d\n",t);

return 0;

}

结果:

[[email protected] time]# ./a.out

the number of seconds since 1970-01-01 00:00 is:1507889358

localtime gmtime ctime asctime  tzset

#include

#include

#include

int main(int argc, const charchar *argv[])

{

struct tmtm *gmt, *local;

time_t tt;

tzset();//void tzset(void);设置时间环境变量-时区

tt=time(NULL);//等价于time(&tt);

charchar *str=ctime(&tt);

printf("ctime is:%s",str);

local=localtime(&tt);

printf("%4d年%02d月%02d日 %2d:%2d:%2d\n",local->tm_year+1900,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec);

printf("lcoaltime is:%s",asctime(local));

gmt=gmtime(&tt);

printf("gmtime is:%s",asctime(gmt));

return 0;

}

结果:

[[email protected] time]# ./a.out

ctime is:Mon Oct 16 10:40:39 2017

2017年10月16日 10:40:39

lcoaltime is:Mon Oct 16 10:40:39 2017

gmtime is:Mon Oct 16 02:40:39 2017

difftime

#include 

#include 

int main(){

time_t t_start, t_end;

t_start = time(NULL) ;

sleep(5);

t_end = time(NULL) ;

printf("time: %.0f s\n", difftime(t_end,t_start)) ;

return 0;

}

结果:

[[email protected] time]# ./a.out

time: 5 s

gettimeofday

#include 

#include 

int main() {

struct timeval start, end;

gettimeofday( &start, NULL );

sleep(3);

gettimeofday( &end, NULL );

int timeuse = 11000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;

printf("time: %d us\n", timeuse);

return 0;

}

结果:

[[email protected] time]# ./a.out

time: 3000205 us

getSystemTime

#include 

#include 

long long getSystemTime() {

struct timeb t;

ftime(&t);

return 11000 * t.time + t.millitm;

}

int main() {

long long start=getSystemTime();

sleep(3);

long long end=getSystemTime();

printf("time: %lld ms\n", end-start);

return 0;

}

结果:

[[email protected] time]# ./a.out

time: 3001 ms

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值