основной вопрос о формате ввода даты и времени - PullRequest
0 голосов
/ 10 апреля 2010

У меня есть указатель на строку (char *) в качестве ввода. Дата / время выглядят так:
Суббота, 10 апреля 2010 г. 19:30 * 002 * Меня интересует только дата, а не время. Я создал "input_facet" в формате, который я хочу:

boost::date_time::date_input_facet inFmt("%a %d %b %Y");

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

Спасибо.

1 Ответ

3 голосов
/ 10 апреля 2010

Вы не всегда можете отклонить временную часть строки из-за разницы часовых поясов, которую может изменить дата.

  • для разбора даты / времени вы можете использовать time_input_facet<>
  • для извлечения части даты из нее вы можете использовать .date() метод

Пример:

// $ g++ *.cc -lboost_date_time && ./a.out 
#include <iostream>
#include <locale>
#include <sstream>

#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>

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

  stringstream ss;
  ss <<                                     "Sat, 10 Apr 2010 19:30:00";
  ss.imbue(locale(locale::classic(),       
                  new local_time_input_facet("%a, %d %b %Y " "%H:%M:%S")));
  ptime t;
  ss.exceptions(ios::failbit);
  ss >> t;
  cout << "date: " << t.date() << '\n' ;
}

Запустите его:

$ g++ *.cc -lboost_date_time && ./a.out 
date: 2010-Apr-10
...