2012-05-07 4 views
7

У меня есть сформированная строка типа "2012-03-28T08: 00: 00". Я хочу получить год, месяц (в формате строки), дату, час, мин, сек и день (в строковом формате). Может ли кто-нибудь предложить мне самый простой способ сделать это в boost.как получить boost :: posix_time :: ptime из форматированной строки

спасибо

+0

Является ли ваша строка всегда в формате ISO вы просили о в вашем вопросе или вам это нужно, чтобы принять любой формат строки? – tinman

ответ

0

Используйте метод to_string для ускорения ptime. http://www.boost.org/doc/libs/1_49_0/doc/html/date_time/posix_time.html

+2

Это неправильное направление. OP хочет преобразовать из строки в ptime. – tinman

+0

Извините, что я имел в виду методы from_string. – v01d

+0

В моем случае строка всегда будет в формате «2012-03-28T08: 00: 00», т. Е. «Yyyy-mm-ddThh: mm: ss» format – Dev

9

Если существующие методы from_string() не соответствуют вашим потребностям, то вы можете использовать фасет времени ввода, который позволяет вам настроить формат, из которого выполняется синтаксический анализ строки.

В вашем случае вы можете использовать расширенный формат строку ISO, так что вы можете использовать следующий код для разбора ваших строк:

boost::posix_time::time_input_facet *tif = new boost::posix_time::time_input_facet; 
    tif->set_iso_extended_format(); 
    std::istringstream iss("2012-03-28T08:00:00"); 
    iss.imbue(std::locale(std::locale::classic(), tif)); 
    iss >> abs_time; 
    std::cout << abs_time << std::endl; 
+0

это сработало ... спасибо большое – Dev

+2

Ницца, но это «новое» уродливо. Можно обойти это, построив фасет так: «boost :: posix_time :: time_input_facet tif (1)». Аргумент «1» означает отсутствие смешного дела с владением и временем жизни ... –

9

без использования граней;

ptime dateTime = boost::date_time::parse_delimited_time<ptime>(string, 'T');

Две from*_string функции имеют ограничения на то, что преобразованные форматы.

  • Не принимает 'T': time_from_string(s).
  • Не принимается '-': from_iso_string(s).

Обратный отсчет ISO 8601 Дата/время в бункере;

std::string date = to_iso_extended_string(dateTime);

Смежные вопросы