как разобрать строку с датой-временем + смещением времени в boost :: posix_time :: ptime? - PullRequest
6 голосов
/ 10 декабря 2011

У меня есть строка "2011-10-20T09: 30: 10-05: 00"

Кто-нибудь знает, как я могу разобрать его с помощью библиотеки boost :: date_time?

Ответы [ 2 ]

7 голосов
/ 10 декабря 2011

хорошо, я нашел ответ

код (для ВС)

преобразует строку в local_date_time, но для меня это приемлемо:

#pragma warning(push)
#pragma warning(disable:4244)
#pragma warning(disable:4245)
#include <boost/date_time/local_time/local_time.hpp>
#pragma warning(pop)

#include <iostream>
#include <string>

int main() 
{
    using namespace std;
    using namespace boost::local_time;

    istringstream ss("2011-10-20T09:30:10-05:00");
    ss.exceptions(ios_base::failbit);
    local_time_input_facet* facet = new local_time_input_facet("%Y-%m-%dT%H:%M:%S%ZP");
    ss.imbue(locale(ss.getloc(), facet));

    local_date_time ldt(not_a_date_time);
    ss >> ldt; // do the parse

    std::cout <<
        ldt.to_string() <<
        "\noffset is: " <<
        to_simple_string(ldt.zone()->base_utc_offset()) <<
        std::endl;
}

может кому-то это понадобится

2 голосов
/ 10 декабря 2011
const char *s = "2011-10-20T09:30:10-05:00";

boost::posix_time::ptime t_local(
    boost::gregorian::from_string(std::string(s, s + 10)),
    boost::posix_time::duration_from_string(std::string(s + 11, s + 19))
);

boost::posix_time::ptime t(
    t_local - boost::posix_time::duration_from_string(std::string(s + 19, s + 25))
);

Теперь t - это время UTC, а t_local - местное время.

...