第一种是时间戳的方式(相对于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;
}