C#、Javaの例を見ましたが、C++の場合、2つの日付の間の日数を計算するソリューションを見つけることができません。
たとえば、2012-01-24と2013-01-08の間
ありがとう!
これは一つの方法です。
#include <iostream>
#include <ctime>
int main()
{
struct std::tm a = {0,0,0,24,5,104}; /* June 24, 2004 */
struct std::tm b = {0,0,0,5,6,104}; /* July 5, 2004 */
std::time_t x = std::mktime(&a);
std::time_t y = std::mktime(&b);
if ( x != (std::time_t)(-1) && y != (std::time_t)(-1) )
{
double difference = std::difftime(y, x) / (60 * 60 * 24);
std::cout << std::ctime(&x);
std::cout << std::ctime(&y);
std::cout << "difference = " << difference << " days" << std::endl;
}
return 0;
}
Thu Jun 24 01:00:00 2004
Mon Jul 05 01:00:00 2004
difference = 11 days
日付をエポック以降の日数を表す整数に変換し、減算します。この例では Rata Die を選択しました。アルゴリズムの説明は< http://mysite.verizon.net/aesir_research/date/rata.htm >にあります。 。
int
rdn(int y, int m, int d) { /* Rata Die day one is 0001-01-01 */
if (m < 3)
y--, m += 12;
return 365*y + y/4 - y/100 + y/400 + (153*m - 457)/5 + d - 306;
}
int days = rdn(2013, 1, 8) - rdn(2012, 1, 24);
boost date_time ライブラリを試すことができます
独自の関数を作成しないようにするには、Boostのdate_timeを使用します。