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

一、时间的类型
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

 (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()可以将日历时间转化为格林威治时间和本地时间,虽然用户可通过结构体tm来获取

这些时间值,但看起来还不方便,最好是将所有的信息,如年、月、日、星期、时、分、秒以字符串的形式显示出来,

这样就加直观.


4.时间显示

char *asctime(const struct tm *tm)
函数功能:将tm格式的时间转化为字符串
参数:日历时间的返回值
例如: SAT Jul 30 08:43:03 2005

该函数较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;
}

char *ctime(const time_t *timep)
函数功能:将日历时间转化为本地时间的字符串形式
参数:日历时间的返回值
该函数较asctime()使用起来更加简单.必须按照下面2个步骤来进行.
<1>使用函数time()来获取日历时间
<2>使用函数ctime()将日历时间直接转化为字符串


5.获取从今日凌晨到现在的时间差
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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/386bec641eb4fbe0dec6a7fdffc94f7c.html