Прошу помочь советом – мне нужно из строки в которой содержится дата и время получить количество секунд с начала эпохи (1.1.1970) (ну или вообще с начала эры то не суть). Строка может быть в разных форматах. Для решения проблемы я решил (точнее мне нужнет именно он по тех заданию) использовать boost (1.54) DataTime но что то совсем запутался с их фасетами.
Вот такая функция упорно возвращает для трех даты времени одинаковое количество секунд
int64_t getSecondsFromDate( const std::string& strDate, const std::string& format )
{
namespace bpt = boost::posix_time;
typedef bpt::time_facet time_facet;
typedef bpt::ptime ptime;
bpt::time_facet* facet = new bpt::time_facet();
facet->format( format.c_str() );
std::stringstream ss( strDate.c_str() );
ss.imbue( std::locale(ss.getloc(), facet) );
bpt::ptime pt;
ss >> pt;
static bpt::ptime epoch( boost::gregorian::date(1970, 1, 1) );
bpt::time_duration diff( pt - epoch );
return diff.total_seconds();
}
...
std::string date1 = "20080501123045";
std::string date2 = "20080501134045";
std::string date3 = "20080501164045";
int64_t sec1 = getSecondsFromDate( date1, "%Y%m%d%H%M%S" );
int64_t sec2 = getSecondsFromDate( date2, "%Y%m%d%H%M%S" );
int64_t sec3 = getSecondsFromDate( date3, "%Y%m%d%H%M%S" );
std::cout << "Date1=" << sec1 << " Date2=" << sec2 << " Date3=" << sec3 << std::endl;
Output
Date1=2077252342 Date2=2077252342 Date3=2077252342
Те никакие мои ухищерения не работают – всегда количество секунд одинаковое. Как быть?