Я пытаюсь проанализировать строку даты/времени в пользовательском формате, используя библиотеку времени даты Boost. Формат, который я пытаюсь использовать, довольно необычен, потому что он включает строку описания поясного времени Posix. docs для библиотеки clearly state, что есть флаг (%ZP
), который можно использовать для ввода и вывода, который обрабатывает строку времени Posix. Значение, которое я пытаюсь разобрать, происходит из веб-браузера и вместо того, чтобы писать JS для выполнения преобразования, указанного в строке зоны, а затем отправлять на сервер в формате UTC, я бы скорее просто сделал это на стороне сервера (поскольку Boost должен делать это очень легко). Очевидно, я не буду публиковать здесь, если это сработает. Этот код выдает boost::bad_lexical_cast
со значением «значение типа источника не может быть интерпретировано как цель».Ошибка анализа с использованием библиотеки даты и времени Boost с строкой часового пояса
using namespace boost::posix_time;
using namespace boost::local_time;
using namespace boost::gregorian;
std::istringstream ss("1989-11-09T15:30:42.005;PST-8PDT,M3.2.0,M11.1.0");
ss.exceptions(std::ios_base::failbit);
local_time_input_facet* facet = new local_time_input_facet("%Y-%m-%dT%H:%M:%S%F;%ZP");
ss.imbue(std::locale(ss.getloc(), facet));
local_date_time ldt(not_a_date_time);
ss >> ldt; // do the parse
std::cout << ldt.to_string();
Однако, если заменить строку формата с "%Y-%m-%dT%H:%M:%S%F;"
, синтаксический анализ преуспевает просто отлично (конечно, он выводит значение в неверном часовом поясе).
Любая идея, что я делаю неправильно? В документах для флага %ZP
нет примера, поэтому я не уверен, как он должен использоваться.
Вы получили это, чтобы работать? – Nim