Chinaunix首页 | 论坛 | 博客
  • 博客访问: 439403
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 594
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-17 16:24
个人简介

我是一只小小鸟

文章分类

全部博文(184)

文章存档

2016年(1)

2015年(55)

2014年(127)

2013年(1)

分类: LINUX

2014-01-09 15:13:53

原文地址:Linux时间编程 作者:allenquan

转自:http://blog.chinaunix.net/uid-26404201-id-3082041.html

 

一、时间的类型
(1)格林威治标准时间
Coordinated Universal Time(UTC)是世界标准时间,即常说的格林威治标准时间(Greenwich Mean Time,GMT).
:格林威治时间和本地时间不同.
(2)日历时间
日历时间(Calendar Time)是用"一个标准时间点(1970110)到此时经过的秒数"来表示的时间.

二、时间函数的API
时间函数的API均属于系统调用函数.
(1)获取日历时间
#include
time_t time(time_t *tloc)
函数功能:获取日历时间,即从1970110点到现在所经历的秒数.
参数:通常设置为NULL
例程:
#include
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
#include
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
#include

int main(void)
{
   struct tm *ptr;
   time_t lt;
   lt=time(NULL);
   ptr=gmtime(<);
   printf(asctime(ptr));
   printf(ctime(<));
   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
#include
#include
#include

void function()
{
   unsigned int i,j;
   double y;
    for(i=0;i<1000;i++)
       for(j=0;j<1000;j++)
           y++;
}

int 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);
     return  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微秒
参数:需要休眠的秒数

阅读(1117) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~