1

タイトルとして、エポック 1900 から現在ブーストを使用するまでの期間を計算する方法は?

編集:前の質問が短すぎてすみません。私の質問をもう一度説明します。誕生日をデータベースに整数として保存することに問題があります。次のように使用する4つの関数を作成しました。

  1. ptime から整数へ (日単位):

     int ti=time_to_int(ptime(date(2012,1,1),0));
     => ti = 15430;//number of day from 1970 to 2012
    
  2. 整数から ptime:

     ptime pt = int_to_time(15430);
    
  3. ptime を文字列に:

     ptime pt(date(2012,1,1), 0);
     string s = time_to_string(pt, "%d.%m.%Y");
    
  4. ptime への文字列:

    ptime pt = string_to_time(%d.%m.%Y);

問題: 上記で、私は 1970 年からエポックを使用しましたが、すべてうまく機能します。では、1945 年 1 月 1 日を整数に変換するにはどうすればよいでしょうか。1900年などからエポックを使う必要があると思います。しかし、1900年から2012年1月1日をintに変換すると、負の数が返されます. いくつかの方法を使用して手動で日付を int に計算することは問題ありませんが、int を日付に戻すのは悪いようです。これを行うためにブーストを使用したいと思います。

なにか提案を?ありがとう!

4

1 に答える 1

1

整数 (int) は、1900 年以降の秒数を保持するには十分な大きさではありません。約 68 年しか保持できません。long (64 ビット) を使用する必要があります。Boost のtime_durationを使用すると、秒数に long としてアクセスできます。@jogojapan で言及されている日数を使用することもできます。ただし、1 日の長さは常に同じであるとは限りません (23 ~ 25 時間)。そのため、物事を日単位で追跡するとエラーが発生しやすくなることがあります (ただし、注意すれば問題ありません)。

ドキュメントからいくつかの例を見てみましょう。2 つの ptime オブジェクトを減算して、time_duration を取得できます。

time_duration td = ptime1 - ptime2;
long secElapsed = td.total_seconds();
于 2012-11-14T05:04:29.700 に答える