2011-10-28 47 views
2

C#からは、戻り値の型(またはパラメータ)としてDateTimeを持つ可能性があるクラスを書くことがよくありました。今私はC++でプログラミングしています。 (time_t型、のtm構造体、Boost.Date_Time、他の何か?)日時値を返すメソッドの戻り値として使用するために適切なデータ型は何である例えば:C++ datetimeを返す適切な関数の戻り値の型?

class Customer 
{ 
    ... 
    ? GetDateTimeCreated() const; 
    void SetLastContactDateTime(? date); 
    ... 
} 

また、どのような関数のパラメータとして日付/時刻の受け入れについては?

+1

'struct tm'は書式設定にのみ使用されます。 C++は、 'time_t'、' Boost.Date_Time'、そしてあなたのプラットフォームがあなたに与えるもののほかに、日付/時刻のための標準を持っていません。 –

+1

time_tは時間値の適切な戻り値の型です。 %manについて、time_tについて調べる時間。可能 –

+0

別のstackoverflowの記事が出て役立つ http://stackoverflow.com/questions/1650715/c-standard-date-time-class – user800612

答えて

2

ライブラリーを作成していて、APIを介して日時の値が公開されている場合は、time_tを使用して、ライブラリーのユーザーがBoostを使用しないようにします。

struct tmは、time_tのフォーマットに使用されています。あなたは通常、それらを周回したくないです。

プログラムで既にBoostを使用していて、Boost.DateTimeの利便性が好きなら、Boost.DateTimeを使用してください。私が正しく覚えているのであれば、boost::posix_time::ptimeは2つの64ビット整数のラッパーに過ぎないので、値渡しに十分軽量です。

C++ 11の機能を使用している場合は、std::chrono::time_point<chrono>から使いたい場合があります。それでもC++ 03の場合は、Boost.Chronoを使用できます。これは、C++ 11の時間機能を実装することを目的としています。 Boost.Chronoを使うことで、将来的にC++ 11への切り替えがより簡単にできるはずです。 ChronoはBoost.DateTimeと同じくらい多くの機能を持っていませんが、これは普通の古いバージョンtime_tからステップアップしています。

秒未満の精度が必要な場合は、Boost.DateTimeまたはChronoを使用してください。

+2

クロノ 'time_point'sがSystem.DateTime''のための良い代替ではありません彼らは(グレゴリオ)の日付のための施設を含んでいないためです。 –

2

Boost.Date_Timeのboost::posix_time::ptimeは、モダンでフル機能を備えており、C#System.DateTimeに最も近いC++アナログです。

boost::posix_time::ptimeSystem.DateTimeは両方とも、符号なし整数をラップする非常に軽量な構造体なので、関数の戻り値が適切です。

わずかな違い:boost::posix_time::ptimeはマイクロ秒精度(デフォルトではテンプレートパラメータで精度を向上させることができます)、System.DateTimeは100ナノ秒の精度を持ちます。