0

入力として文字列(char *)へのポインタがあります。日付/時刻は次のようになります。
2010年4月10日土曜日19:30:00
私は日付のみに関心があり、時間には関心がありません。必要な形式で「input_facet」を作成しました。

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

しかし、私はそれをどうするかわかりません。最終的には、文字列から日付オブジェクトを作成したいと思います。私はその入力ファセットとフォーマットで正しい方向に進んでいると確信していますが、それをどのように使用するかわかりません。

ありがとう。

4

1 に答える 1

3

日付が変更される可能性があるタイムゾーンの違いにより、文字列の時間部分を常に無視できるとは限りません。

  • 使用できる日付/時刻を解析するには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
于 2010-04-10T06:31:00.160 に答える