2011-10-30 10 views
6

私はプロトコルバッファにタイプとして定義されていないDateフィールドを持つprotoファイルを書き込むためにtrynigです。プロトコルバッファ:Date型の定義方法?

私は次の記事を読んだが、私に合った適切な解決策を見つけることができなかった: What the best ways to use decimals and datetimes with protocol buffers?

私はprotoファイルをjavaに変換しようとしています。

答えて

4

私の答えは主にprotobuf-netに関連しています。しかし、あなたがJavaからこれから来ているので、私はお勧めします:それを簡単に保つ。

日付に関しては、私は時代(おそらくミリ秒)をエポック(1970年1月1日は伝統的です)に使うことをお勧めします。時代は、同じ単位(ミリ秒など)のサイズ。 10進数の場合は、単純にスケーリングで固定小数点を使用してください。おそらく1.05をlong 1050として扱い、常に正確に3dp(したがって固定小数点)をアサートしてください。

これは単純で実用的であり、複雑なことをせずに最も一般的なシナリオをカバーします。

+0

Thx ...私はurのアドバイスに従って、日付フィールドを "int64"としてprotoファイルに表示させ、これをDateに変換してJavaクラスに変換します。 – Echo

+0

これは私が通常やっていることですが、unixエポックからmillisを保存するだけです。 – Jeremy

+0

int64またはfixed64をお勧めしますか? – ticktock

2

私はこのアイデアでは売られていませんが、は本当にです。これはタイムスタンプとして日付を保存するという考え方では販売されていないので、ここに私の提案があります。

日付を人間が読み取り可能な整数(たとえば、2014-11-320141103になります)に変換し、この整数値を保存します。これは必要なデータを正確に含み、作成と解析が簡単で、最小限のスペースを占有します。さらに、注文され、日付の有効な値への1対1のマッピングがあります(許可されています、無効な数字が可能です。たとえば、20149999ですが、検出が簡単です)。対照的に、毎日を表す約86400の有効なタイムスタンプがあります。

注:discussion on DBA SEがありますが、ここでは明らかにそうではない特殊な日付タイプが存在します。

関連する問題