在程序中,咱們常常性的會使用到時間格式的轉化,好比講time_t轉化成string,或者反過來轉,下面就是實現的代碼。分爲 2009-3-24 和 2009-3-24 0:00:08兩種時間格式。
時間格式:2009-3-24 :測試
#include <sys/time.h> /* string to time_t 時間格式 2009-3-24 */ int API_StringToTime(const string &strDateStr,time_t &timeData) { char *pBeginPos = (char*) strDateStr.c_str(); char *pPos = strstr(pBeginPos,"-"); if(pPos == NULL) { return -1; } int iYear = atoi(pBeginPos); int iMonth = atoi(pPos + 1); pPos = strstr(pPos + 1,"-"); if(pPos == NULL) { return -1; } int iDay = atoi(pPos + 1); struct tm sourcedate; bzero((void*)&sourcedate,sizeof(sourcedate)); sourcedate.tm_mday = iDay; sourcedate.tm_mon = iMonth - 1; sourcedate.tm_year = iYear - 1900; timeData = mktime(&sourcedate); return 0; } /* time_t to string */ int API_TimeToString(string &strDateStr,const time_t &timeData) { char chTmp[15]; bzero(chTmp,sizeof(chTmp)); struct tm *p; p = localtime(&timeData); p->tm_year = p->tm_year + 1900; p->tm_mon = p->tm_mon + 1; snprintf(chTmp,sizeof(chTmp),"%04d-%02d-%02d", p->tm_year, p->tm_mon, p->tm_mday); strDateStr = chTmp; return 0; }
時間格式 2009-3-24 0:00:08 :code
/* string to time_t 時間格式 2009-3-24 0:00:08 或 2009-3-24 */ int API_StringToTimeEX(const string &strDateStr,time_t &timeData) { char *pBeginPos = (char*) strDateStr.c_str(); char *pPos = strstr(pBeginPos,"-"); if(pPos == NULL) { printf("strDateStr[%s] err \n", strDateStr.c_str()); return -1; } int iYear = atoi(pBeginPos); int iMonth = atoi(pPos + 1); pPos = strstr(pPos + 1,"-"); if(pPos == NULL) { printf("strDateStr[%s] err \n", strDateStr.c_str()); return -1; } int iDay = atoi(pPos + 1); int iHour=0; int iMin=0; int iSec=0; pPos = strstr(pPos + 1," "); //爲了兼容有些沒精確到時分秒的 if(pPos != NULL) { iHour=atoi(pPos + 1); pPos = strstr(pPos + 1,":"); if(pPos != NULL) { iMin=atoi(pPos + 1); pPos = strstr(pPos + 1,":"); if(pPos != NULL) { iSec=atoi(pPos + 1); } } } struct tm sourcedate; bzero((void*)&sourcedate,sizeof(sourcedate)); sourcedate.tm_sec = iSec; sourcedate.tm_min = iMin; sourcedate.tm_hour = iHour; sourcedate.tm_mday = iDay; sourcedate.tm_mon = iMonth - 1; sourcedate.tm_year = iYear - 1900; timeData = mktime(&sourcedate); return 0; } /* time_t to string 時間格式 2009-3-24 0:00:08 */ int API_TimeToStringEX(string &strDateStr,const time_t &timeData) { char chTmp[100]; bzero(chTmp,sizeof(chTmp)); struct tm *p; p = localtime(&timeData); p->tm_year = p->tm_year + 1900; p->tm_mon = p->tm_mon + 1; snprintf(chTmp,sizeof(chTmp),"%04d-%02d-%02d %02d:%02d:%02d", p->tm_year, p->tm_mon, p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec); strDateStr = chTmp; return 0; }
全部的代碼都通過測試,不會有內存泄漏和句柄泄漏,能夠放心使用~
另附:
結構tm的定義爲:內存
struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; int tm_sec 表明目前秒數,正常範圍爲0-59,但容許至61秒 int tm_min 表明目前分數,範圍0-59 int tm_hour 從午夜算起的時數,範圍爲0-23 int tm_mday 目前月份的日數,範圍01-31 int tm_mon 表明目前月份,從一月算起,範圍從0-11 int tm_year 從1900 年算起至今的年數 int tm_wday 一星期的日數,從星期一算起,範圍爲0-6 int tm_yday 從今年1月1日算起至今的天數,範圍爲0-365 int tm_isdst 日光節約時間的旗標