0

C (任意のライブラリなど) で 2 つの日付間の期間を計算するにはどうすればよいですか?

プログラムは、2 つの (現地の) 日付を入力として取り、それらの間の期間を出力として提供する必要があります。

例えば、

startDate = OCT-09-1976 and endDate = OCT-09-2008 
should show a duration of 32 years. 

startDate = OCT-09-1976 and endDate = DEC-09-2008 
should show a duration of 32 years and 2 months.

ありがとう。

4

2 に答える 2

3

strptimeを使用して、日付を 2 つの struct tm 構造体に変換します。

Difftimeは、2 つの差を秒単位で示します。

ここのコードでそれを月などに変換します(C++で、ただしC++は文字列の書式設定のためだけで、簡単に変更できます)

編集:コメンターが観察したように、それは月の問題を回避します。isodiff_from_secs の (GPL 化された) コードがあり、月が 30 日であるという仮定に満足している場合は、必要に応じて変換できます。Googleコードサーチと標準の説明はこちらをご覧ください

実際の日の間の実際の月を考慮に入れた完全に正しい解決策を実行することは、かなり複雑です。それはあなたの問題に必要ですか?

于 2008-11-29T15:54:01.737 に答える
1

私は最近、Boost.Date_Timeを使用して非常に似たようなことを行い、結果の関数を C として提示しましたが、これにはもちろん C++ リンカを使用する必要があります。

実際には、この例には少し足りない点があります。開始日と終了日は常に月の同じ日になるのでしょうか? もしそうなら、月と年の数の些細な減算で終わる日の数を無視することができます。

ただし、日付が月のどこにでもある場合は、もう少し注意が必要です。すべての月の日数が同じではないことに注意してください。

C difftimeは月の計算には役立ちません。そのため、Boost を使用しましたが、そのオプションがない場合もあります。

于 2008-11-29T15:50:49.947 に答える