您的位置:首页 > 编程语言

时间编程

2013-05-07 11:48 169 查看
 

说明:只供学习交流,转载请注明出处

 

日历时间(Calendar Time):通过time_t数据类型来表示,从一个时间点(通常是1970年1月1日0时0分0秒)到此时的秒数。

 

格林威治时间(Greenwich Mean Time GMT):由英国皇家格林尼治天文台提供的标准时间。

 

本地时间(Local Time):根据格林威治时间和本地时区计算出的时间。

 

tm结构体:

tm结构体(Time Structure)是C语言中用于表示日期和时间的结构体,几个重要的时间函数都与它相关。它总共包含8个成员,它们分别是:

struct tm

{

      int tm_sec;  //表示秒数,在[0,61]之间,多出来的两秒是用来处理跳秒问题

      int tm_min; //表示分数,在[0,59]之间

      int tm_hour; //表示时数,在[0,23]之间

      int tm_mday; //表示本月第几日,在[1,31]之间

      int tm_mon; //表示本年第几月,在[0,11]之间

      int tm_year; //表示从1900年现在的年数

      int tm_wday; //表示本周第几日,在[0,6]之间

      int tm_yday; //表示本年第几日,在[0,365]之间,润年有366日

      int tm_isdst; //表示是否为日光节约时间

};

 

time函数
 

头文件

#include <time.h>

函数原型

time_t time(time_t timer);

返回值

返回日历时间

功能:获取当前的系统时间

参数说明:timer=NULL时得到系统的日历时间,timer=时间数值时,用于设置日历时间。

 

 

 

 

localtime函数
 

头文件

#include <time.h>

函数原型

struct tm* localtime(const time_t  *clock);

返回值

返回指向tm结构体的指针

函数功能:通过日历时间获得本地时间,并保存至tm结构体。

参数说明:clock指向日历时间的指针变量。

 

gmtime函数
 

头文件

#include <time.h>

函数原型

struct tm *gmtime(long *clock);

返回值

返回指向tm结构体的指针

函数功能:通过日历时间获得格林威治时间,并保存至tm结构体。

参数说明:clock是指向日历时间的指针变量。

 

asctime函数
 

头文件

#include <time.h>

函数原型

Char *asctime(const struct tm *tblock);

返回值

返回字符串格式:星期,月,日,小时:分:秒,年

函数功能:将tm格式的时间转换为字符串,如Sat Jul 30 08:43:03 2005

参数说明:tblock记录时间的tm结构体。

 

 

ctime函数
 

头文件

#include <time.h>

函数原型

Char *ctime(const time_t *time);

返回值

返回字符串格式:星期,月,日,小时:分:秒,年

函数功能:把日期和时间转换为字符串。

参数说明:time为指向日历时间的指针变量,该参数因由函数time函数获得。

 

gettimeofday函数
 

头文件

#include <time.h>

函数原型

int gettimeofday(struct timeval *tv,  struct timezone *tz);

返回值

成功返回0,失败返回-1

函数功能:获取从今日凌晨到现在的时间差,常用于计算时。或者说取得当前时间。

参数说明:tv为当前timeval结构,tz为时区结构。

struct timeval

{

      int tv_sec ;//秒数

      int tv_usec; //微秒数

}

 

 

settimeofday函数
 

头文件

#include <time.h>

函数原型

int settimeofday(const struct timeval  *tv, const struct timezone *tz);

返回值

成功返回0,失败返回-1

函数功能:把日期和时间转换为字符串

参数说明:tv为当前timeval结构,tz为时区结构

 

实例:

#include <time.h>

#include <stdio.h>

 

int main(void)

{

       struct tm *ptr = NULL;

       struct tm *str = NULL;

 

       time_t lt;

 

       lt = time(NULL);

       ptr = gmtime(<);

       str = localtime(<);

 

       printf(asctime(str));

       printf(asctime(ptr));

       printf(ctime(<));

 

       return (0);

}

 

运行结果:

[root@localhost test]# ./time

Mon May 6 18:55:08 2013

Mon May 6 18:55:08 2013

Mon May 6 18:55:08 2013

 

总结:

要获取本地时间字符串,一般需要三个步骤:

(1):通过time函数获得日历时间。

(2):通过localtime函数将日历时间转化为本地时间并保存在tm结构体中。

(3):通过asctime函数将本地时间转化为字符串。

当然,可以不经过步骤(2),直接使用ctime从日历时间获取时间字符串。但实际上它们内部实现是一样的。

 

在实际中,很多时候并不需要asctime函数转换的固定格式字符串。通常是通过localtime函数获得表示本地时间的tm结构体,再通过此结构体成员输出自定义时间字符串格式。因此可以通过tm结构体更加灵活的获得时间字符串。

 

实例:

#include <stdio.h>

#include <sys/time.h>

#include <time.h>

#include <string.h>

 

char *weekday[] = {

"Sun", "Mon","Tue", "Wed", "Thu", "Fri","Sat"

};

 

char *Asctime(const struct tm *timeptr)

{

       static char ts[256];

       bzero(ts, 256);

 

       sprintf(ts, "%s %d %d %02d:%02d:%02d %d",

                weekday[timeptr->tm_wday],

                timeptr->tm_mon+1,timeptr->tm_mday,

                timeptr->tm_hour,timeptr->tm_min,

                timeptr->tm_sec,timeptr->tm_year + 1900);

 

       return (ts);

}

 

int main(int argc, char *argv[])

{

       struct tm *ptm;

       time_t t = time(NULL);

 

       ptm = localtime(&t);

 

       printf("%s\n", Asctime(ptm));

 

       return (0);

}

运行结果:

[root@localhost test]# ./asctime

Mon 5 6 20:03:46 2013

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息