1.指定time_t类型的时间,格式化为YYYYMMDDHH24MISS型的字符串
void FormatTime(time_t time1, char *szTime)
{
struct tm tm1;
#ifdef WIN32
tm1 =*localtime(&time1);
#else
localtime_r(&time1,&tm1 );
#endif
sprintf( szTime,"%4.4d%2.2d%2.2d%2.2d%2.2d%2.2d",
tm1.tm_year+1900,tm1.tm_mon+1, tm1.tm_mday,
tm1.tm_hour, tm1.tm_min,tm1.tm_sec);
}
2.指定YYYYMMDDHH24MISS型的时间,格式化为time_t型的时间
time_t FormatTime2(char * szTime)
{
struct tm tm1;
time_t time1;
sscanf(szTime, "M-----",
&tm1.tm_year,
&tm1.tm_mon,
&tm1.tm_mday,
&tm1.tm_hour,
&tm1.tm_min,
&tm1.tm_sec);
tm1.tm_year -= 1900;
tm1.tm_mon --;
tm1.tm_isdst=-1;
time1 =mktime(&tm1);// 注意,如果要printf打印tm的内容,应当放在mktime调用
之前,调用之后它的内容可能会变化
return time1;
}
3.localtime函数内部使用的是static变量存储的结果,也就是说首先它不是线程安全的,再者不能同时用它转换两个时间,即假如有
time_t startTime, time_t stopTime
struct tm *starttm, *stoptm;
starttm = localtime(&startTime);
stoptm = localtime(&stopTime);
这样最终实际上starttm和stoptm指向的是同一个值,也就是说它俩的值都是后面这个调用即stopTime转换过来的值。
正确的用法是使用localtime_r,它是线程安全的:
localtime_r(&startTime, &starttm);
localtime_r(&stopTime, &stoptm);