web-dev-qa-db-ja.com

2つの日付間の日数C ++

C#、Javaの例を見ましたが、C++の場合、2つの日付の間の日数を計算するソリューションを見つけることができません。

たとえば、2012-01-24と2013-01-08の間

ありがとう!

17
Breakdown

これは一つの方法です。

#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

ここに元の著者の投稿への参照があります

19
sharafjaffri

日付をエポック以降の日数を表す整数に変換し、減算します。この例では 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);
15
chansen

boost date_time ライブラリを試すことができます

3
user1252446

独自の関数を作成しないようにするには、Boostのdate_timeを使用します。

0
Mihai8