• 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:

    [objc] view plain copy
     
    1. #include<stdio.h>  
    2. #include<time.h>  
    3. int main()  
    4. {  
    5. time_t t;  
    6. t=time(NULL);  
    7. printf("the number of seconds since 1970-01-01 00:00 is:%d ",t);  
    8. return 0;  
    9. }  
    结果:

    [root@libmaster time]# ./a.out 
    the number of seconds since 1970-01-01 00:00 is:1507889358

    localtime gmtime ctime asctime  tzset

    [objc] view plain copy
     
    1. #include<time.h>  
    2. #include<stdio.h>  
    3. #include<stdlib.h>  
    4. int main(int argc, const charchar *argv[])  
    5. {  
    6.     struct tmtm *gmt, *local;  
    7.     time_t tt;  
    8.     tzset();//void tzset(void);设置时间环境变量-时区  
    9.     tt=time(NULL);//等价于time(&tt);  
    10.     charchar *str=ctime(&tt);  
    11.         printf("ctime is:%s",str);  
    12.     local=localtime(&tt);  
    13.     printf("%4d年%02d月%02d日 %2d:%2d:%2d ",local->tm_year+1900,local->tm_mon+1,local->tm_mday,local->tm_hour,local->tm_min,local->tm_sec);  
    14.     printf("lcoaltime is:%s",asctime(local));  
    15.     gmt=gmtime(&tt);  
    16.         printf("gmtime is:%s",asctime(gmt));  
    17.         return 0;  
    18. }  
    结果:

    [root@libmaster 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

    [objc] view plain copy
     
    1. #include <stdio.h>  
    2. #include <time.h>  
    3. int main(){  
    4.     time_t t_start, t_end;  
    5.     t_start = time(NULL) ;  
    6.     sleep(5);  
    7.     t_end = time(NULL) ;  
    8.     printf("time: %.0f s ", difftime(t_end,t_start)) ;  
    9.     return 0;  
    10. }  
    结果:

    [root@libmaster time]# ./a.out 
    time: 5 s

    gettimeofday

    [objc] view plain copy
     
    1. #include <stdio.h>  
    2. #include <sys/time.h>  
    3. int main() {  
    4.     struct timeval start, end;  
    5.     gettimeofday( &start, NULL );  
    6.     sleep(3);  
    7.     gettimeofday( &end, NULL );  
    8.     int timeuse = 11000000 * ( end.tv_sec - start.tv_sec ) + end.tv_usec - start.tv_usec;  
    9.     printf("time: %d us ", timeuse);  
    10.     return 0;  
    11. }  
    结果:

    [root@libmaster time]# ./a.out 
    time: 3000205 us

    getSystemTime

    [objc] view plain copy
     
    1. #include <stdio.h>  
    2. #include <sys/timeb.h>  
    3. long long getSystemTime() {  
    4.     struct timeb t;  
    5.     ftime(&t);  
    6.     return 11000 * t.time + t.millitm;  
    7. }  
    8. int main() {  
    9.     long long start=getSystemTime();  
    10.     sleep(3);  
    11.     long long end=getSystemTime();  
    12.     printf("time: %lld ms ", end-start);  
    13.     return 0;  
    14. }  
    结果:

    [root@libmaster time]# ./a.out 
    time: 3001 ms


  • 相关阅读:
    python基础31[常用模块介绍]
    在Linux下编写Daemon
    python实例31[文件夹清理]
    GDB调试器用法
    python实例31[自动挂载虚拟盘]
    LDAP基础
    Windows上使用Linux shell
    python语法31[iterator和generator+yield]
    python类库31[logging]
    python实例26[验证用户是否存在于LDAP Server]
  • 原文地址:https://www.cnblogs.com/itrena/p/9050652.html
Copyright © 2020-2023  润新知