C语言Linux下关于时间概念的C语言编程

Abstract

  在先后中,平常需求输出系统的当前光阴、总括程序的履行时间、使用计时器等。

Introduction

① 、时间的系列
1.Green威治标准时间
   coordinated universal
time(UTC)是社会风气标准时间,即常说的格林威治标准时间(greenwich mean
time,GMT).
2.日历小时
   日历时间(calendar
time)是用”五个正经时间点(如一九七零年七月三日0点)到此刻通过的秒数”来代表的时间.
  
② 、时间函数的API

  时间函数的API均属于系统调用函数.。

1.取得日历时间
   #include <time.h>
   time_t time(time_t *tloc)
   函数功用:获取日历时间,即从壹玖陆捌年七月十九日0点到现行所经历的秒数.
   参数:平时设置为NULL

 (time_t在time.h中定义:typedef long int time_t)
   例:
   #include <time.h>
   void main()
   {
      int seconds=0;
      seconds = time(NULL);
      printf(“seconds=%d\n”,seconds);
   }
   执行结果:
[root@localhost Time]# ./time
seconds=1294908511
   寻常用户得到日历时间的秒数没有实际的含义,但足以为时间转载做一些搭配性质的工作.为了更好的行使时间,用

户亟待将这几个秒数转化为更简单接受的岁月代表方法,那一个代表时间的方法有格林威治时间、本地时间等.
2.将日历时间转移为格林威治标准时间
   struct tm *gmtime(const time_t *timep)
   函数成效:将日历时间转发为格林威治标准时间,并保留在tm结构
   参数:日历时间的重临值
3.将日历时间转载为当地时间
   struct tm* localtime(const time_t *timep)
   函数功效:将日历时间转载为本土时间,并保留至tm结构
   参数:日历时间的重临值
  
由地点七个函数可以看出,那七个函数的重回值均存放在tm结构中,具体的tm结构如下:
   struct tm
   {
      int tm_sec;   //秒值
      int tm_min;   //分钟值
      int tm_hour;  //小时值
      int tm_mday;  //本月第几日
      int tm_mon;   //本年第几月
      int tm_year;  //tm_year+1900=哪一年
      int tm_wday;  //本周第几日
      int tm_yday;  //本年第几日
      int tm_isdst; //日光节约时间
   }
   建立time1.c
   #include <stdio.h>
   #include <time.h>
   int main(void)
   {
  struct tm *local;
      time_t t;
      t = time(null);   //获取日历时间
      local = localtime(&t);  //将日历时间转载为地点时间,并保留在struct
tm结构中
      printf(“local hour is :%d\n”,local->tm_hour);
      local = gmtime(&t); 
//将日历时间转发为格林威治时间,并保留在struct tm结构中
      printf(“utc hour is :%d\n”,local->tm_hour);
      return 0;
   }
   执行结果:
[root@localhost Time]# gcc time1.c -o
time1
[root@localhost Time]# ./time1
Local hour is: 0
UTC hour is: 8
[root@localhost Time]# date
Thu Jan 13 00:52:44 PST 2011
  
利用函数gmtime()、localtime()能够将日历时间转载为Green威治时间和地面时间,即便用户可通过社团体tm来赢得

那一个日子值,但看起来还不便宜,最好是将兼具的消息,如年、月、日、星期、时、分、秒以字符串的花样显得出来,

如此就加直观.
4.时间呈现

   char *asctime(const struct tm *tm)
   函数功效:将tm格式的大运维载为字符串
   参数:日历时间的重返值
   例如: SAT Jul 30 08:43:03 2005

该函数较ctime()使用起来更为的复杂.必须依据上边二个步骤来进行.
   <1>使用函数time()来获取日历时间
   <2>使用函数gmtime()将日历时间转载为格林威治标准时间
   <3>使用函数asctime()将tm格式的时刻转载为字符串
   例程:
    #include <time.h>
    #include <stdio.h>
    int main(void)
   {
      struct tm *ptr;
      time_t lt;
      lt=time(null);  /*取得日历时间*/
      ptr=gmtime(&lt); /*中转为格林威治时间*/
      printf(asctime(ptr)); /*以格林威治时间的字符串方式打印*/
      printf(ctime(&lt)); /*以本土时间的字符串格局打印*/
      return 0;
   }

   char *ctime(const time_t *timep)
   函数成效:将日历时间转载为本地时间的字符串方式
   参数:日历时间的再次来到值
   该函数较asctime()使用起来更为简单.必须遵从下面1个步骤来进行.
   <1>使用函数time()来赢得日历时间
   <2>使用函数ctime()将日历时间一贯转接为字符串
  5.获取从前日黎明(英文名:lí míng)到近来的年华差
   int gettimeofday(struct timeval *tv,struct timezone *tz)
   函数功效:获取从昨日黎明(英文名:lí míng)(0:0:0)于今的小时差,常用来计算事件耗时
  
参数1:存放以前日凌晨(0:0:0)距今的光阴差,时间差以秒或微秒为单位,以结构体格局存放
         struct timeval
        {
           int tv_sec;    //秒数
           int tv_usec;   //微秒数
        }
   参数2:常设置为null
  
函数用法:可以在做某件事情从前调用gettimeofday(),在做完该件工作随后调用gettimeofday(),七个函数的参数1

的差就是做该业务所用度的时间.
   例程:计算函数function()的耗时
    time.c
    #include <sys/time.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    void function()   /* 算法分析 */
   {
      unsigned int i,j;
      double y;
      for(i=0;i<1000;i++)
        for(j=0;j<1000;j++)
         y++;
   }
   void main()
  {
      struct timeval tpstart,tpend;
      float timeuse;
      gettimeofday(&tpstart,null); // 开首时间
      function();
      gettimeofday(&tpend,null);   // 为止时间
  /* 总计执行时间,以飞秒为单位举办计算 */
     
timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+tpend.tv_usec-tpstart.tv_usec;
      timeuse/=1000000;
      printf(“used time:%f\n”,timeuse);
      exit(0);
  }
 执行结果:
 [root@localhost lishuai]# gcc time.c -o time -wall
 [root@localhost lishuai]# ./time
    use time:0.006288
6.延时函数
   <1>使程序睡眠seconds秒
      unsigned int sleep(unsigned int seconds)
   函数效能:使程序睡眠seconds秒
   参数:需求休眠的秒数
   <2>使程序睡眠usec阿秒
      void usleep(unsigned long usec)
   函数功效:使程序睡眠usec毫秒
   参数:须要休眠的秒数