時間轉換函式,locatime轉換與恢復,已測試ok
阿新 • • 發佈:2021-01-05
技術標籤:Hilog
時間time_t和string(char)格式互轉 #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 : /* 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 日光節約時間的旗標