liunx 时间函数与时间格式与字符串之间的转化方法
我们可以认为格林威治时间就是时间协调时间(GMT=UTC)
GMT:格林威治时间
UTC:时间协调时间
1、time_t
time_ttime(time_t*t);
取得从1970年1月1日至今的秒数。
time_t类型,这本质上是一个长整数(long),表示从1970-01-0100:00:00到目前计时时间的秒数,timeval则精确到毫秒
2、timeval
timeval类型,这是一个结构体类型,structtimeval头文件为time.h
structtimeval { time_ttv_sec;/*Seconds.*/ //秒 suseconds_ttv_usec;/*Microseconds.*/ //微秒 };
使用:
structtimevaltv; gettimeofday(&tv,NULL); printf("%d\t%d\n",tv.tv_usec,tv.tv_sec);
3、timezone
structtimezone { inttz_minuteswest;/*minuteswestofGreenwich*/ inttz_dsttime;/*typeofDSTcorrection*/ };
4、structtm
tm结构,这本质上是一个结构体,里面包含了各时间字段
structtm{ inttm_sec;/*secondsaftertheminute-[0,59]*/ inttm_min;/*minutesafterthehour-[0,59]*/ inttm_hour;/*hourssincemidnight-[0,23]*/ inttm_mday;/*dayofthemonth-[1,31]*/ inttm_mon;/*monthssinceJanuary-[0,11]*/ inttm_year;/*yearssince1900*/ inttm_wday;/*dayssinceSunday-[0,6]*/ inttm_yday;/*dayssinceJanuary1-[0,365]*/ inttm_isdst;/*daylightsavingstimeflag*/ };
其中tm_year表示从1900年到目前计时时间间隔多少年,如果是手动设置值的话,tm_isdst通常取值-1。
功能:
tm结构体包含,年、月、日,时、分、秒
使用:
time_tt_time; structtm*tmp_ptr=NULL; time(&t_time); printf("t_time=%d.\n",t_time); tmp_ptr=gmtime(&t_time); printf("aftergmtime,thetimeis:\ \nyday=%d\ \nwday=%d\ \nyear=%d\ \nmon=%d\ \nmday=%d\ \nhour=%d\ \nmin=%d\ \nsec=%d\ \nisdst=%d.\n", tmp_ptr->tm_yday, tmp_ptr->tm_wday, tmp_ptr->tm_year, tmp_ptr->tm_mon, tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, tmp_ptr->tm_isdst );
打印:
t_time=1513841065. aftergmtime,thetimeis: yday=354 wday=4 year=117 mon=11 mday=21 hour=7 min=24 sec=25 isdst=0.
5、ctime/asctime
char*ctime(consttime_t*timep);
将timep转换为真是世界的时间,以字符串显示,它和asctime不同就在于传入的参数形式不一样。
char*asctime(conststructtm*timeptr);
将结构中的信息转换为真实世界的时间,以字符串的形式显示。
char*ctime(consttime_t*timer)返回一个表示当地时间的字符串,当地时间是基于参数timer。
返回的字符串格式:ThuDec2113:59:572017
使用:
time_tcurtime; structtm*tm_ptr=NULL; time(&curtime); tm_ptr=localtime(&curtime); printf("ctime转换的当前时间=%s",ctime(&curtime)); printf("asctime转换的当前时间=%s",asctime(tm_ptr));
打印:
ctime转换的当前时间=ThuDec2113:59:572017
asctime转换的当前时间=ThuDec2113:59:572017
6、gmtime/localtime
structtm*gmtime(consttime_t*timep);
将time_t表示的时间转换为没有经过时区转换的UTC时间,是一个structtm结构指针。
stucttm*localtime(consttime_t*timep);
和gmtime类似,但是它是经过时区转换的时间。
time_tcurtime;
gmtime函数将curtime转换为structtm结构的格林威治时间,基本的意思是,gmtime转出来的是0时区的标准时间
localtime函数将curtime转换为structtm结构的本地时间,localtime是将时区考虑在内了,转出的当前时区的时间。
举个例子:
time_tt_time; structtm*tmp_ptr=NULL; time(&t_time); printf("t_time=%d.\n",t_time); tmp_ptr=gmtime(&t_time); printf("aftergmtime,thetimeis:\ \nyday=%d\ \nwday=%d\ \nyear=%d\ \nmon=%d\ \nmday=%d\ \nhour=%d\ \nmin=%d\ \nsec=%d\ \nisdst=%d.\n", tmp_ptr->tm_yday, tmp_ptr->tm_wday, tmp_ptr->tm_year, tmp_ptr->tm_mon, tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, tmp_ptr->tm_isdst ); tmp_ptr=localtime(&t_time); printf("afterlocaltime,thetimeis:\ \nyday=%d\ \nwday=%d\ \nyear=%d\ \nmon=%d\ \nmday=%d\ \nhour=%d\ \nmin=%d\ \nsec=%d\ \nisdst=%d.\n", tmp_ptr->tm_yday, tmp_ptr->tm_wday, tmp_ptr->tm_year, tmp_ptr->tm_mon, tmp_ptr->tm_mday, tmp_ptr->tm_hour, tmp_ptr->tm_min, tmp_ptr->tm_sec, tmp_ptr->tm_isdst ); return0;
打印:
t_time=1513841065. aftergmtime,thetimeis: yday=354 wday=4 year=117 mon=11 mday=21 hour=7 min=24 sec=25 isdst=0. afterlocaltime,thetimeis: yday=354 wday=4 year=117 mon=11 mday=21 hour=15 min=24 sec=25 isdst=0.
7、mktime
time_tmktime(structtm*timeptr);
将structtm结构的时间转换为从1970年至今的秒数。
mktime与gmtime/localtime功能相反,gmtime/localtime将time_t转换为structtm结构体数据,mktime将structtm重新转换为time_t类型的UTC时间
使用例子:
time_tt_time; structtm*tm_ptr=NULL; time(&t_time); printf("time_tfirsttimevalue=%d.\n",t_time); tm_ptr=gmtime(&t_time); printf("time_tswitchgmtimetype,thetimeis:\ \nyday=%d\ \nwday=%d\ \nyear=%d\ \nmon=%d\ \nmday=%d\ \nhour=%d\ \nmin=%d\ \nsec=%d\ \nisdst=%d.\n", tm_ptr->tm_yday, tm_ptr->tm_wday, tm_ptr->tm_year, tm_ptr->tm_mon, tm_ptr->tm_mday, tm_ptr->tm_hour, tm_ptr->tm_min, tm_ptr->tm_sec, tm_ptr->tm_isdst ); t_time=mktime(tm_ptr);/*重新转换为time_t类型的UTC时间,这里有一个时区的转换,时间为0区的时间,所以一下使用的时间都为0区的时间*/ printf("gmtimetypeswitchtime_tsecondtime=%d.\n",t_time);
打印:
time_tfirsttimevalue=1513842674. time_tswitchgmtimetype,thetimeis: yday=354 wday=4 year=117 mon=11 mday=21 hour=7 min=51 sec=14 isdst=0. gmtimetypeswitchtime_tsecondtime=1513813874.
8、gettimeofday
intgettimeofday(structtimeval*tv,structtimezone*tz);
返回当前距离1970年的秒数和微妙数,后面的tz是时区,一般不用。
使用例子:
structtimevaltime_val; gettimeofday(&time_val,NULL);//gettimeofday(&start,&tz);结果一样 printf("时间秒.tv_sec:%d.\n",time_val.tv_sec); printf("时间微秒.tv_usec:%d.\n",time_val.tv_usec);
打印:
时间秒.tv_sec:1513843633 时间微秒.tv_usec:689374
9、difftime
doubledifftime(time_ttime1,time_ttime2);
返回两个时间相差的秒数
使用例子:
//获得时间差 time_tt_start; time_tt_end; time(&t_start); sleep(5); time(&t_end); printf("间隔时间=%f.\n",difftime(t_end,t_start));
打印:
间隔时间=5.000000.
10、strftime
size_tstrftime(char*strDest,size_tmaxsize,constchar*format,conststructtm*timeptr);
使用strftime()函数将时间格式化为我们想要的格式。
( %a星期几的简写 %A星期几的全称 %b月分的简写 %B月份的全称 %c标准的日期的时间串 %C年份的后两位数字 %d十进制表示的每月的第几天 %D月/天/年 %e在两字符域中,十进制表示的每月的第几天 %F年-月-日 %g年份的后两位数字,使用基于周的年 %G年分,使用基于周的年 %h简写的月份名 %H24小时制的小时 %I12小时制的小时 %j十进制表示的每年的第几天 %m十进制表示的月份 %M十时制表示的分钟数 %n新行符 %p本地的AM或PM的等价显示 %r12小时的时间 %R显示小时和分钟:hh:mm %S十进制的秒数 %t水平制表符 %T显示时分秒:hh:mm:ss %u每周的第几天,星期一为第一天(值从0到6,星期一为0) %U第年的第几周,把星期日做为第一天(值从0到53) %V每年的第几周,使用基于周的年 %w十进制表示的星期几(值从0到6,星期天为0) %W每年的第几周,把星期一做为第一天(值从0到53) %x标准的日期串 %X标准的时间串 %y不带世纪的十进制年份(值从0到99) %Y带世纪部分的十进制年份 %z,%Z时区名称,如果不能得到时区名称则返回空字符。 %%百分号 )
使用例子:
time_tt_time; charbuf[128]; structtm*tm_ptr=NULL; time(&t_time); tm_ptr=localtime(&t_time); //2017-12-2118:53:58 strftime(buf,64,"%Y-%m-%d%H:%M:%S",tm_ptr); strftime(buf,64,"%Y-%m-%d---%H:%M:%S",tm_ptr); printf("formatTimeString=%s.\n",buf);
打印:
formatTimeString=2017-12-2118:53:58. formatTimeString=2017-12-21---18:54:46.
11、strptime
功能和strftime功能相反,将字符串格式化为一个tm结构。
size_tstrftime(char*s,size_tmaxsize,char*format,conststructtm*timeptr);
使用例子:
charbuf[]="2017-12-21---18:54:46"; structtmtm_ptr; //2017-12-2118:53:58 strptime(buf,"%Y-%m-%d---%H:%M:%S",&tm_ptr); printf("----strptime-----,thetimeis:\ \nyday=%d\ \nwday=%d\ \nyear=%d\ \nmon=%d\ \nmday=%d\ \nhour=%d\ \nmin=%d\ \nsec=%d.\n", tm_ptr.tm_yday, tm_ptr.tm_wday, tm_ptr.tm_year, tm_ptr.tm_mon, tm_ptr.tm_mday, tm_ptr.tm_hour, tm_ptr.tm_min, tm_ptr.tm_sec );
打印:
----strptime-----,thetimeis: yday=354 wday=4 year=117 mon=11 mday=21 hour=18 min=54 sec=46.
以上这篇liunx时间函数与时间格式与字符串之间的转化方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。