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
Jerry's function looks great. Here's my attempt.. I threw in the __TIME__ as well.
#include <iostream>
#include <sstream>
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;
}