技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 时间time_t和string(char*)格式互转

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

浏览:2578次  出处信息

在程序中,我们经常性的会使用到时间格式的转化,比如讲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 从今年11日算起至今的天数,范围为0-365
int tm_isdst 日光节约时间的旗标

建议继续学习:

  1. 查询Linux系统最后重启时间的三个方法    (阅读:3534)
  2. 等待的时间比你想象的更久    (阅读:2642)
  3. Shell Tips: Unix 时间到字面    (阅读:2674)
  4. Linux下如何查看系统启动时间和运行时间    (阅读:2564)
  5. php获取文件创建时间、修改时间    (阅读:2456)
  6. linux 查看自己系统装于何时    (阅读:2423)
  7. linux时间相关结构体和函数整理    (阅读:2491)
  8. python中对时间处理的几个函数    (阅读:2392)
  9. 如何正确地处理时间    (阅读:2232)
  10. 在 Perl 下处理时间的小技巧 strftime    (阅读:2072)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:AIR 编程的途径
  • 作者:Dante    来源: Vimer
  • 标签: 时间
  • 发布时间:2009-11-12 23:19:12
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1