Convert string from __DATE__ into a time_t

后端 未结 7 686
后悔当初
后悔当初 2021-02-07 18:10

I\'m trying to convert the string produced from the __DATE__ macro into a time_t. I don\'t need a full-blown date/time parser, something that only han

7条回答
  •  一生所求
    2021-02-07 18:40

    Jerry's function looks great. Here's my attempt.. I threw in the __TIME__ as well.

    #include 
    #include 
    
    using namespace std;
    
    time_t time_when_compiled()
    {
        string datestr = __DATE__;
        string timestr = __TIME__;
    
        istringstream iss_date( datestr );
        string str_month;
        int day;
        int year;
        iss_date >> str_month >> day >> year;
    
        int month;
        if     ( str_month == "Jan" ) month = 1;
        else if( str_month == "Feb" ) month = 2;
        else if( str_month == "Mar" ) month = 3;
        else if( str_month == "Apr" ) month = 4;
        else if( str_month == "May" ) month = 5;
        else if( str_month == "Jun" ) month = 6;
        else if( str_month == "Jul" ) month = 7;
        else if( str_month == "Aug" ) month = 8;
        else if( str_month == "Sep" ) month = 9;
        else if( str_month == "Oct" ) month = 10;
        else if( str_month == "Nov" ) month = 11;
        else if( str_month == "Dec" ) month = 12;
        else exit(-1);
    
        for( string::size_type pos = timestr.find( ':' ); pos != string::npos; pos = timestr.find( ':', pos ) )
            timestr[ pos ] = ' ';
        istringstream iss_time( timestr );
        int hour, min, sec;
        iss_time >> hour >> min >> sec;
    
        tm t = {0};
        t.tm_mon = month-1;
        t.tm_mday = day;
        t.tm_year = year - 1900;
        t.tm_hour = hour - 1;
        t.tm_min = min;
        t.tm_sec = sec;
        return mktime(&t);
    }
    
    int main( int, char** )
    {
        cout << "Time_t when compiled: " << time_when_compiled() << endl;
        cout << "Time_t now: " << time(0) << endl;
    
        return 0;
    }
    

提交回复
热议问题