Год вне допустимого диапазона: 1400 ... 10000 - PullRequest
6 голосов
/ 24 марта 2011

Я пытаюсь использовать boost :: date_time для разбора строки даты (полученной из Twitter API) в объект ptime.Пример формата даты:

Thu Mar 24 16:12:42 +0000 2011

Независимо от того, что я делаю, я получаю исключение "Год вне допустимого диапазона" при попытке разобрать строку.Формат даты выглядит мне корректно, вот код:

boost::posix_time::ptime created_time;
std::stringstream ss(created_string);
ss.exceptions(std::ios_base::failbit); //Turn on exceptions
ss.imbue(std::locale(ss.getloc(), new boost::posix_time::time_input_facet("%a %b %d %T %q %Y")));
ss >> created_time;

В приведенном выше коде "creation_string" содержит вышеуказанную дату.Я сделал ошибку в строке формата?

Ответы [ 2 ]

4 голосов
/ 24 марта 2011

И %T, и %q являются флагами формата вывода в режиме онлайн.

Чтобы продемонстрировать это, измените формат на "%a %b %d %H:%M:%S +0000 %Y", и ваша программа будет работать, как описано.

Какдля ввода часового пояса это немного сложнее, возможно, вам придется предварительно обработать строку, чтобы изменить +0000 на формат часового пояса posix сначала.

РЕДАКТИРОВАТЬ: например, вы могли бысделать это так:

#include <iostream>
#include <sstream>
#include <boost/date_time.hpp>
int main()
{
        //std::string created_string = "Thu Mar 24 16:12:42 +0000 2011";
        // write your own function to search and replace +0000 with GMT+00:00
        std::string created_string = "Thu Mar 24 16:12:42 GMT+00:00 2011";

        boost::local_time::local_date_time created_time(boost::local_time::not_a_date_time);
        std::stringstream ss(created_string);
        ss.exceptions(std::ios_base::failbit);
        ss.imbue(std::locale(ss.getloc(),
                 new boost::local_time::local_time_input_facet("%a %b %d %H:%M:%S %ZP %Y")));
        ss >> created_time;
        std::cout << created_time << '\n';
}
3 голосов
/ 24 марта 2011

Согласно документам , %T не может использоваться для ввода в это время, так как за ним следует ! на графике.Я не могу проверить это прямо сейчас, но я подозреваю, что это ваша проблема.

Редактировать:

%q также является флагом только вывода, как указано в комментариях ниже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...