c++ 标准 字符串转换为时间 时间大小比较 判断有效期 简洁办法

c# php delphi java 等各种语言 对字符串转换为日期 然后与当前日期进行比较 是非常容易的 因为有现成的函数可用

标准 c++ 硬是找不到 合适的代码可用

于是

百度了很多 没百出个结果

于是综合网上资料 自己优化了下 直接拿来用 即可

time_t str_to_time_t(const string& ATime, const string& AFormat="%d-%d-%d")  
{  
    struct tm tm_Temp;  
    time_t time_Ret;  
    try 
    {
        int i = sscanf(ATime.c_str(), AFormat.c_str(),// "%d/%d/%d %d:%d:%d" ,       
                    &(tm_Temp.tm_year),   
                    &(tm_Temp.tm_mon),   
                    &(tm_Temp.tm_mday),  
                    &(tm_Temp.tm_hour),  
                    &(tm_Temp.tm_min),  
                    &(tm_Temp.tm_sec),  
                    &(tm_Temp.tm_wday),  
                    &(tm_Temp.tm_yday));  
             
        tm_Temp.tm_year -= 1900;  
        tm_Temp.tm_mon --;  
        tm_Temp.tm_hour=0;  
        tm_Temp.tm_min=0;  
        tm_Temp.tm_sec=0;  
        tm_Temp.tm_isdst = 0;
        time_Ret = mktime(&tm_Temp);  
        return time_Ret;  
    } catch(...) {
        return 0;
    }
}  

time_t NowTime()
{
    time_t t_Now = time(0);
    struct tm* tm_Now = localtime(&t_Now);
    tm_Now->tm_hour =0;
    tm_Now->tm_min = 0;
    tm_Now->tm_sec = 0;
    return  mktime(tm_Now);  
}

bool IsValidTime(const time_t& AEndTime, const time_t& ANowTime )
{
    return (AEndTime >= ANowTime);
}

调用方法
string sEndTime ="2013-12-9";
string sTemp;
time_t t_Now = NowTime();
time_t t_End = str_to_time_t(sEndTime);
if (IsValidTime(t_End, t_Now)) {
sTemp = "有效日期";
} else {
sTemp = "时间过期";
}

  

++新增两个通用方法 (新增date(double) to time_t) +time_t to string

string time_t_to_str(const time_t &ATime_t, const string& AFormat="%d-%d-%d")
{
    char chRet[15];
    string sRet;
    struct tm *p;
    try
    {
        p = localtime(&ATime_t);
        p->tm_year = p->tm_year + 1900;
        p->tm_mon = p->tm_mon + 1;
        sprintf(chRet, AFormat.c_str(),
            p->tm_year, p->tm_mon, p->tm_mday);
        sRet = chRet;
        return sRet;
    } catch(...) {
        return "";
    }
}

time_t date_to_timet( double ADate, bool AClearDecimal= false) 
{
    if (AClearDecimal){
        ADate = int(ADate);
    }
    return (time_t)((Adate-25569)*(24*60*60)-timezone + 0.5 );
}
// time_t dttime = date_to_timet(41618.9023, true);
[DATE]double(41618)=string("2013-12-10")
 

 

原文地址:https://www.cnblogs.com/maphc/p/3462952.html