Библиотека C ++ (unix) для разбора строки даты / времени Включая часовые пояса - PullRequest
5 голосов
/ 23 августа 2010

У меня есть даты в нескольких форматах. Теперь я хотел бы иметь функцию (из некоторой библиотеки) на c ++, которая может анализировать эти строки даты / времени и давать мне некоторую структуру, такую ​​как tm, или преобразовывать их в некоторое детерминированное представление, чтобы я мог поиграть с датой / временем.

Вот некоторые форматы, которые я вижу: Вт, 19 фев 2008 20:47:53 +0530 Вт, 28 апр. 2009 18:22:39 -0700 (PDT)

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

Я пробовал boost и strptime, но, насколько я знаю, оба не поддерживают часовые пояса на входах. я что-то пропустил?

Любая помощь в этом вопросе будет по достоинству оценена.

Привет

Ответы [ 2 ]

2 голосов
/ 23 августа 2010

Вы можете сделать это с помощью boost, но это немного касается формата часовых поясов во входной строке. Он должен быть в формате часового пояса POSIX .

Например:

#include <iostream>
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/time_facet.hpp>
int main()
{
       std::string msg = "28 Apr 2009 18:22:39 PST-8PDT,M4.1.0,M10.1.0"; // or just "PDT-7" but that will be a new, fake time zone called 'PDT'

       std::istringstream ss(msg);
       ss.imbue( std::locale(ss.getloc(),
                 new boost::local_time::local_time_input_facet("%d %b %Y %H:%M:%S%F %ZP")));
       boost::local_time::local_date_time t(boost::date_time::pos_infin);
       ss >> t;
       std::cout << t << '\n';
       // and now you can call t.to_tm() to get your tm structure
}

Я бы добавил некоторую предварительную обработку, чтобы преобразовать форматы часовых поясов в формат posix, а затем скормить строки для повышения.

1 голос
/ 25 августа 2010

Если вам нужно иметь дело с большим количеством форматов, я предлагаю взглянуть на ICU: http://site.icu -project.org /

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