Ускорение строки синтаксического анализа даты и времени

Я просмотрел много примеров, которые, кажется, касаются этого простого случая. Строка, которую я хочу разобрать:

"2012-06-01 16:45:34 EDT "

Я попытался создать local_time_input_facetследующим образом: "%Y-%m-%d %H:%M:%S %Z"

Указатель зоны объекта local_date_timeвсегда не установлен. Чтение документации сбивает с толку:

%Z *! Полное название часового пояса (только вывод). Этот флаг игнорируется при использовании time_facet с ptime.

"EDT" // Восточное летнее время

Кто-нибудь делал это раньше?

ОБНОВЛЕНИЕ: я обновил код, чтобы немного лучше проиллюстрировать проблему:

using namespace std;
using namespace boost::local_time;

int main()
{
    stringstream ss;

    // Set up the input datetime format.
    local_time_input_facet *input_facet 
    = new local_time_input_facet("%Y-%m-%d %H:%M:%S %ZP");
    ss.imbue(std::locale(ss.getloc(), input_facet));

    local_date_time ldt(not_a_date_time),ldt1(not_a_date_time);

    // Read a time into ldt
    ss.str("2012-06-01 17:45:34 EDT");
    ss >> ldt;

    ss.str("2012-06-01 17:45:34 CDT");
        ss >> ldt1;
        std::cerr << (ldt - ldt1).total_seconds() << std::endl;

    // Write the time to stdout.
    cout << "Full Time:\t"   << ldt.to_string() << endl;
    cout << "Local time:\t"  << ldt.local_time() << endl;
    cout << "Time zone:\t"   << ldt.zone_as_posix_string() << endl;
    cout << "Zone abbrev:\t" << ldt.zone_abbrev() << endl;
    cout << "Zone offset:\t" << ldt.zone_abbrev(true) << endl;

    cout << "Full Time:\t"   << ldt1.to_string() << endl;
    cout << "Local time:\t"  << ldt1.local_time() << endl;
    cout << "Time zone:\t"   << ldt1.zone_as_posix_string() << endl;
    cout << "Zone abbrev:\t" << ldt1.zone_abbrev() << endl;
    cout << "Zone offset:\t" << ldt1.zone_abbrev(true) << endl;

    return 0;
}

ВЫВОД:

0
Full Time:  2012-Jun-01 17:45:34 EDT
Local time: 2012-Jun-01 17:45:34
Time zone:  EDT+00
Zone abbrev:    EDT
Zone offset:    +0000
Full Time:  2012-Jun-01 17:45:34 CDT
Local time: 2012-Jun-01 17:45:34
Time zone:  CDT+00
Zone abbrev:    CDT
Zone offset:    +0000
7
задан user151019 7 June 2012 в 09:52
поделиться