时间time_t和string(char*)格式互转

来源:互联网 发布:淘宝助理 未知错误 1 编辑:程序博客网 时间:2024/04/30 06:25
在程序中,我们经常性的会使用到时间格式的转化,比如讲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 :

/*   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-59int tm_hour 从午夜算起的时数,范围为0-23int tm_mday 目前月份的日数,范围01-31int tm_mon 代表目前月份,从一月算起,范围从0-11int tm_year 从1900 年算起至今的年数int tm_wday 一星期的日数,从星期一算起,范围为0-6int tm_yday 从今年1月1日算起至今的天数,范围为0-365int tm_isdst 日光节约时间的旗标




原创粉丝点击