時間time_t和string(char*)格式互轉

來源:互聯網
上載者:User
 

在程式中,我們經常性的會使用到時間格式的轉化,比如講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)
    {
        API_Error_Log(LM_ERROR, “strDateStr[%s] err “, strDateStr.c_str());
        return -1;
    }
    int iYear = atoi(pBeginPos);
    int iMonth = atoi(pPos + 1);
    pPos = strstr(pPos + 1,“-”);
    if(pPos == NULL)
    {
        API_Error_Log(LM_ERROR, “strDateStr[%s] err “, strDateStr.c_str());
        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 日光節約時間的旗標

著作權,轉載請註明出處。http://www.vimer.cn

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.