2011-08-05 17 views
4

私はミリ秒を解析できるboost::posix_time::time_input_facetを探しています。私が2011-12-11 08:29:53.123000を持っている場合、私は、その"%Y-%m-%d %H:%M:%S"ような何かを、それを解析するためにフォーマットする権利を持っていると思いますので、"%f"ブーストでマイクロ秒の解析

あるフォーマットのマイクロ秒のためのものと同じではないようです。

+0

* milli *秒は* micro *秒である必要があります – ymett

+0

目標は何ですか?上記の形式の文字列からミリ秒/マイクロ秒を取得するだけですか? – murrekatt

+0

目的は、情報をタイムスタンプに従ってソートし、後でそれをより正確に表示できるように、ms/us情報を持つことです。 – Arthur

答えて

3

あなたはこのようPTIMEオブジェクトにそれを変換することができ、日付/時刻文字列がある場合:

using boost::posix_time; 
ptime t = time_from_string(datetimeString); 

小数点以下の秒を保持しているTIME_DURATIONのこのあなたが簡単に取得することができますホールドを有します。

time_duration td = t.time_of_day(); 
long fs = td.fractional_seconds(); 

また、このようなトータルミリ秒またはマイクロ秒取得することができます:documentationに何ができるかについて

long ms = td.total_milliseconds(); 
long us = td.total_microseconds(); 

詳しい情報を。

UPDATE

あなたが適切な形式のためtime_facet.hppを確認することができますtime_input_facetを使用したいので、入力フォーマットは、異なるものであるかもしれない場合。解析時に、私は以下を参照してください。

time_facet.hpp
static const char_type fractional_seconds_format[3];    // f                                 
    static const char_type fractional_seconds_or_none_format[3];  // F                                 
    static const char_type seconds_with_fractional_seconds_format[3]; // s 

アップデート2

(1.45ブースト):

case 'f': 
{ 
    // check for decimal, check special_values if missing                                  
    if(*sitr == '.') { 
     ++sitr; 
     parse_frac_type(sitr, stream_end, frac); 
     ... 

私はなぜ表示されないここでは、おそらくから選択するようにしたいものですこれには、秒と小数点以下の秒の間に何も必要ありません。 Boostの別のバージョンを使用しているかもしれませんか?

+0

それは確かに動作しますが、自分の日付とは別の書式設定フォームを使用しても、まだ動作するかどうかはわかりません。私は '%Y-%m-%d%H:%M:%S'に追加するミリ秒またはマイクロ秒のタグを探しています。私はそれが '%3N'だと思ったが、うまくいきませんでした。 – Arthur

+1

'%Y-%m-%d%H:%M:%s'が動作します。また、構文解析ファセットは '%Y-%m-%d%H:%M:%S%f'ですが、フォーマットは'%Y-%m-%d%H:%Mです。 :%S.%f'( '%fの前に' .'を書きます) – Arthur

+0

どのバージョンのブーストを使用していますか? 1.45では、私は現在入力ファセットのチェックをしています。分数秒を解析する前に点(ドット)を挿入します。 – murrekatt

関連する問題