Linux时间编程

一、时间的类型
(1)格林威治标准时间
    Coordinated Universal Time(UTC)是世界标准时间,即常说的格林威治标准时间(Greenwich Mean Time,GMT).
    注:格林威治时间和本地时间不同.
(2)日历时间
    日历时间(Calendar Time)是用"一个标准时间点(如1970年1月1日0点)到此时经过的秒数"来表示的时间.
   
二、时间函数的API
    时间函数的API均属于系统调用函数.
(1)获取日历时间
    #include <time.h>
    time_t time(time_t *tloc)
    函数功能:获取日历时间,即从1970年1月1日0点到现在所经历的秒数.
    参数:通常设置为NULL
    例程:
    #include <time.h>
    void main()
    {
          int seconds=0;
          seconds = time((time_t *)NULL);
          printf("seconds=%d\n",seconds);
    }
    执行结果:
    seconds=1287902909
    Attention!!!
    通常用户得到日历时间的秒数没有实际的意义,但可以为时间转化做一些铺垫性质的工作.为了更好的利用时间,用户需要将这些秒数转化为更容易接受的时间表示方式,这些表示时间的方式有格林威治时间、本地时间等.
(2)将日历时间转换为格林威治标准时间
    struct tm *gmtime(const time_t *timep)
    函数功能:将日历时间转化为格林威治标准时间,并保存在tm结构
    参数:日历时间的返回值
(3)将日历时间转化为本地时间
    struct tm* localtime(const time_t *timep)
    函数功能:将日历时间转化为本地时间,并保存至tm结构
    参数:日历时间的返回值
    Attention!!!
    由上面两个函数可以看出,这两个函数的返回值均存放在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; //日光节约时间
    }
    time.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 lishuai]# gcc time.c -o time -Wall
    [root@localhost lishuai]# date    //获取Linux系统的当前时间
    Mon Dec 14  03:27:16  CST 2009
    [root@localhost lishuai]# ./time
    local hour is : 3      //(Linux系统的)当前时间是3点
    UTC hour is : 19        //格林威治时间是19点 
    Attention!!!
    利用函数gmtime()、localtime()可以将日历时间转化为格林威治时间和本地时间,虽然用户可通过结构体tm来获取这些时间值,但看起来还不方便,最好是将所有的信息,如年、月、日、星期、时、分、秒以字符串的形式显示出来,这样就加直观.
(4)将日历时间转化为本地时间的字符串形式
    char *ctime(const time_t *timep)
    函数功能:将日历时间转化为本地时间的字符串形式
    参数:日历时间的返回值
    Attention!!!
    该函数较asctime()使用起来更加简单.必须按照下面2个步骤来进行.
    <1>使用函数time()来获取日历时间
    <2>使用函数ctime()将日历时间直接转化为字符串
(5)将格林威治时间转化为字符串
    char *asctime(const struct tm *tm)
    函数功能:将tm格式的时间转化为字符串
    参数:日历时间的返回值
    例如: Sat Jul 30 08:43:03 2005
    Attention!!!
    该函数较ctime()使用起来更加的复杂.必须按照下面3个步骤来进行.
    <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;
    }
(6)获取从今日凌晨到现在的时间差
    int gettimeofday(struct timeval *tv,struct timezone *tz)
    函数功能:获取从今日凌晨(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
(7)延时函数
    <1>使程序睡眠seconds秒
          unsigned int sleep(unsigned int seconds)
    函数功能:使程序睡眠seconds秒
    参数:需要休眠的秒数
    <2>使程序睡眠usec微秒
          void usleep(unsigned long usec)
    函数功能:使程序睡眠usec微秒
    参数:需要休眠的秒数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值