C语言中的time函数

来源:互联网 发布:淘宝店铺装修设计 编辑:程序博客网 时间:2024/06/05 00:13
在C语言中,一般有两种表示时间的方式:
第一种是时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的,以time_t 类型表示。time_t 实际上是int64类型。

第二种以结构体的形式表示即(struct tm),共有九个元素,分别表示,同一个时间戳的struct tm会因为时区不同而不同。

struct tm 
{
        int tm_sec;     /* seconds after the minute - [0,59] */
        int tm_min;     /* minutes after the hour - [0,59] */
        int tm_hour;    /* hours since midnight - [0,23] */
        int tm_mday;    /* day of the month - [1,31] */
        int tm_mon;     /* months since January - [0,11] */
        int tm_year;    /* years since 1900 */
        int tm_wday;    /* days since Sunday - [0,6] */
        int tm_yday;    /* days since January 1 - [0,365] */
        int tm_isdst;   /* daylight savings time flag */
};

结构体中,有些字段是从0开始,这样在显示时需要加1,比如tm_mon.

以前在用到time的函数时,总是忘记某些用法,感觉使用上有些别扭,今天在学习Python的time模块时点击打开链接,想到C语言的time有关函数也是比较模糊,于是就看一看,正好二者可以有一个对比。这样会记忆比较深刻。

C语言中,有关time的函数都放在time.h头文件里。

函数名称:     time 
函数原型:     time_t time(time_t *timer) 
函数功能:     得到机器的日历时间或者设置日历时间 
函数返回:     机器日历时间 
参数说明:     timer= NULL时得到机器日历时间,timer=时间数值时,用于设置日历时间,time_t是一个long类型 

函数名称:     localtime 
函数原型:     struct tm *localtime(const time_t *timer) 
函数功能:     返回一个以tm结构表达的机器时间信息,返回的指针使用完毕后不需要释放。返回所在时区的时间
参数说明:     time-用函数time()得到的时间信息 
函数返回:     以tm结构表达的时间.

函数名称:     gmtime 
函数原型:     struct tm *gmtime(time_t  *time) 
函数功能:     得到以结构tm表示的时间信息,返回的是UTC时间。 返回的指针使用完毕后不需要释放。
函数返回:     以结构tm表示的时间信息指针 
参数说明:     time-用函数time()得到的时间信息 

int _tmain(int argc, _TCHAR* argv[]){time_t xx =time(NULL);struct tm *tblock1,*tblock2;tblock1 = localtime(&xx);printf("Current Time is: %d:%d:%d\n",tblock1->tm_hour,tblock1->tm_min ,tblock1->tm_sec );tblock2 = gmtime(&xx);printf("UTC     Time is: %d:%d:%d\n",tblock2->tm_hour,tblock2->tm_min ,tblock2->tm_sec );getchar();return 0;}

函数名称:    mktime 
函数原型:     time_t mktime(struct tm * _Tm) 
函数功能:     执行与gmtime(), localtime()相反的操作,它接收struct tm对象作为参数,返回用秒数来表示时间的整数。
函数返回:     以time_t表示的时间信息
int _tmain(int argc, _TCHAR* argv[]){struct tm *pTime = NULL,*pTime2=NULL; time_t nTime = time(NULL);printf("Slip Second is %d\n",nTime);   pTime  = gmtime(&nTime);printf("Slip Second is %d\n",mktime(pTime));pTime2 = localtime(&nTime);printf("Slip Second is %d\n",mktime(pTime2)); //This is correctgetchar();return 0;}

函数名称:    ctime 
函数原型:     char *ctime(long time) 
函数功能:     得到日历时间 
函数返回:     返回字符串格式:星期,月,日,小时:分:秒,年 ,返回的指针使用完毕后不需要释放。
参数说明:     time-该参数应由函数time获得 

函数名称:    asctime 
函数原型:     char* asctime(struct tm * ptr) 
函数功能:     得到机器时间(日期时间转换为ASCII码) ,返回的指针使用完毕后不需要释放。
函数返回:     返回的时间字符串格式为:星期,月,日,小时:分:秒,年 
参数说明:     结构指针ptr应通过函数localtime()和gmtime()得到 

int _tmain(int argc, _TCHAR* argv[]){time_t nTime = time(NULL);char *strTime = ctime(&nTime);        struct tm *pTime =localtime(&nTime);        char *strTime2 =asctime(pTime);printf("Current Time is %s\n",strTime);printf("Current Time is %s\n",strTime2);getchar();return 0;}

运行结果如下:


函数名称:     strftime 
函数原型:     size_t  strftime( char * Buf,  size_t bytes, const char * Format, const struct tm * tm);
函数功能:     将一个tm结构格式化为一个字符串。
函数返回:     返回格式化后的字符串的长度
参数说明:     buf    : [in]字符串存放空间;

      bytes : [in]空间大小; 

                      Format:[in]时间格式化参数 ; 

tm:[in]时间信息指针
 
函数名称:     strptime 
函数原型:     char *strptime(const char *buf,const char *format,struct tm *tm)
函数功能:     则是将一个字符串格式化为一个tm结构,Linux平台下有此函数,windows平台下无此函数。
函数返回:     返回一个指针,指向转换过程处理的最后一个字符后面的那个字符。
参数说明:     buf: [in]字符串存放空间; format:[in]时间格式化参数;  tm:[out]时间信息指针

int _tmain(int argc, _TCHAR* argv[]){time_t nTime =0;struct tm *tm_ptr = NULL;struct tm timestruct;char buf[256]={0};time(&nTime);printf("Current Time is %d\n",nTime);tm_ptr = localtime(&nTime);strftime(buf,sizeof(buf),"%Y-%m-%d %H:%M:%S",tm_ptr);printf("strftime gives:%s\n",buf);printf("#####################Test strptime###################################\n");strcpy(buf,"Sat 26 July 2003,17:53 will do fine");printf("calling strptime with: %s/n",buf);tm_ptr = ×truct;char *result = strptime(buf,"%a %d %b %Y,%R",tm_ptr);printf("strptime consumed up to: %s/n",result);printf("strptime gives:/n");printf("date: %02d/%02d/%02d/n",tm_ptr->tm_year%100,tm_ptr->tm_mon+1,tm_ptr->tm_mday);printf("time: %02d:%02d/n",tm_ptr->tm_hour,tm_ptr->tm_min);getchar();return 0;}

                                             
0 0