C语言中的time函数

在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 correct
	
	getchar();
	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;
}


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值