C++ time_t与string之间转换的工具类

之前在做项目的时候遇到了这个需求,当然baidu到了这个工具类一直忘了分享,现在补上分享,但是出处忘了,如果有博友知道出处,我到时候再补充上。

工具类支持两种格式 一种精确到日,一种精确到秒,如果有其他需求 可以自己修改方法的实现。


#include <string>
#include <sys/time.h>
/*
    string to time_t
    时间格式  2009-3-24
*/
class Convert_between_string_time_t
{
public :
    static  int API_StringToTime(const std::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;
        memset((void*)&sourcedate,0,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
    */
    static int API_TimeToString(std::string &strDateStr,const time_t &timeData)
    {
        char chTmp[15];
        memset(chTmp,0,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;
    };

//    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 日光节约时间的旗标

    /*
    string to time_t
    时间格式 2009-3-24 0:00:08 或 2009-3-24
    */
    static int API_StringToTimeEX(const std::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;
        memset((void*)&sourcedate,0,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
       */
    static int API_TimeToStringEX(std::string &strDateStr,const time_t &timeData)
    {
        char chTmp[100];
        memset(chTmp,0,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;
    }

};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值