2

既存のマルチプラットフォーム ライブラリに変更を加えています。ライブラリは現在、重要なイベントの「タイムスタンプ」を保存するためにtime_tとを使用しtime(NULL)ていますが、秒単位の解像度ではもはや十分ではありません。ライブラリは既にさまざまな目的で Boost を使用しているため、すべてのtime_tタイムスタンプを Boost.Date_Time オブジェクトの 1 つに変換することを検討していました。

しかし、「Posix Time」と「Local Time」の間で少し混乱しています。現地時間にもタイムゾーンが含まれているのは唯一の違いですか? 使用するタイムゾーンを指定することptimeで、オブジェクトをオブジェクトに変換できるようです。local_date_time

ptimeタイムスタンプを保存するために使用し、クライアント/呼び出し元が必要に応じて変換するかどうかを自分で決定できるようにする必要があると考えるのは正しいlocal_date_timeですか?

4

1 に答える 1

4

簡潔な答え:

はい、boost ptime は time_t に最も近いものになります。どちらもエポック/記録された時間の始まりからの秒数です。また、Boost ptime は、タイムゾーンを指定して Boost local_date_time に自由に変換できます。

通常の用途は、ユニバーサル タイムスタンプを保存し、オンデマンドで表示するためにローカルで意味のある時間に変換することです。そう、

東海岸のサーバーは、現地時間 2012-02-12 17:05 EST に何らかのイベントを記録する場合があります。これは、2012-02-13 00:05 UTC としてのエポック以降の秒の prime/time_t 内部表現に変換され、それをデータベース。次に、パリのクライアントは local_date_time/struct tm を 2012-02-13 01:05 CET に変換し、サンフランシスコのクライアントは 2012-02-12 13:05 PST に変換できます。

より長い答え: (おそらく、time_t で既に標準化されているアプリケーションには関係ありません)

ただし、地理的要素に何らかの意味がある場合は、ローカルの日時を直接保存する場合もあります。世界中に多くのイベント ソースがあることを想像するかもしれません。それらのイベントがローカルで昼間なのか夜間なのかを知ることは興味深いかもしれません。2 つの方法のうちの 1 つを回復する可能性があります。ローカルの日付/構造体 tm を直接保存するか、元のタイムゾーンとローカル時間を保持する他の日時オフセット/タイムゾーン タイプ (例: 14:00 PST (昼間) または 03:05 CET (夜間)) を保存します。

または、タイムゾーンを復元できるように、元のソースへの参照を使用してイベントを保存します。しかし、ソースを削除する可能性のあるメンテナンスや、単純な結合がないことを考えると、タイムゾーンに保存された地理情報をリバース エンジニアリングするよりも簡単なことがよくあります。

于 2012-02-13T04:28:51.343 に答える