这两天在做平台移植,程序从windows平台移植到linux下运行,着实麻烦哦~
时间获取部分:localtime_s和localtime_r的参数是相反的,囧。。。。
#ifndef linux localtime_s(&tm_now,&tNow); #else localtime_r(&tNow,&tm_now); #endif
对于systemtime 和tm 以及time_t 的转换
// 功能: linux版的GetLocalTime获取本地时间
void GetLocalTime(SYSTEMTIME* lpSystemTime)
{
struct timeval tv;
gettimeofday (&tv , NULL);
tm tm_now ;
localtime_r(&tv.tv_sec,&tm_now);
lpSystemTime->wYear = tm_now.tm_year+1900; //年份
lpSystemTime->wMonth = tm_now.tm_mon+1; //月 tm[0-11] sys[1-12]
lpSystemTime->wDay = tm_now.tm_mday; //日
lpSystemTime->wDayOfWeek = (tm_now.tm_wday+1)%7 ; // tm一星期的日数,从星期一算起,范围为0-6 sys从星期日算起
lpSystemTime->wHour =tm_now.tm_hour; //小时
lpSystemTime->wMinute = tm_now.tm_min; //分钟
lpSystemTime->wSecond = tm_now.tm_sec; //秒
lpSystemTime->wMilliseconds = tv.tv_usec/1000; //毫秒
}
//将system转换成time_t
void SystemTime2Time_T(LPSYSTEMTIME pSysTime,time_t* pTime)
{
tm tm_tmp = {pSysTime->wSecond,
pSysTime->wMinute,
pSysTime->wHour,
pSysTime->wDay,
pSysTime->wMonth-1,
pSysTime->wYear-1900,
pSysTime->wDayOfWeek, 0, 0};
*pTime = mktime(&tm_tmp);
}
测试代码:
1 int main (int argc, char* argv[]) {
2
3 SYSTEMTIME systime;
4 time_t t_tmp=time(NULL);
5 printf("org %I64d \r\n",t_tmp);
6 GetLocalTime(&systime);
7
8 printf("after get time %04d-%02d-%02d %02d:%02d:%02d.%d\r\n",systime.wYear,systime.wMonth,
9 systime.wDay,systime.wHour,
10 systime.wMinute,systime.wSecond,systime.wMilliseconds);
11 time_t t_now;
12 SystemTime2Time_T(&systime,&t_now);
13 printf("convent %I64d\r\n",t_now);
14 getchar();
15 }
/* 运行结果 org 1318434216 after get time 2011-10-12 23:43:36.532 convent 1318434216 */