C言語ケーススタディ 1970年以前でも使える日付の処理(2つの日付間の日数)




2014年10月より個人の方を対象に、Study C無料提供を開始しました。
C言語を勉強中の方は、学習・教育に最適なC言語インタープリタのStudy Cを使ってみてください(個人の方は無料です)。
大学・高専・高校などの教育機関での採用実績も多数あるロングセラー商品Study Cが、個人向けに無料提供を始めました。
インタープリタの手軽さに加え、ゲームや3Dタートルグラフィックで楽しく勉強したりと、C言語の学習を強力にサポートします。
ブロック崩しゲーム 3Dツリー クリスマスツリー
また、このようなボタンの用意されているページでは、掲載しているプログラムをStudy Cに直接ロードし実行したりすることができます。
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する
Study C無料利用についての詳細は、このページを参照してください。



日付間の日数は前回のケーススタディのの式で計算することができます。 計算方法は簡単で、二つの日付に対して係数を計算し、その差を求めれば2つの日付間の日数になります。
プログラムは2個分の日付をscanf関数で入力しそれぞれに対しCalcIndex関数で係数を求めその差を表示しました(大小比較して表示しています)。
int     CalcIndex(int yyyy, int mm, int dd);

main()
{
        int     yyyy1, mm1, dd1, idx1;
        int     yyyy2, mm2, dd2, idx2;

        printf("日付1\n");
        printf("年 : ");
        scanf("%d", &yyyy1);
        printf("月 : ");
        scanf("%d", &mm1);
        printf("日 : ");
        scanf("%d", &dd1);
        idx1 = CalcIndex(yyyy1, mm1, dd1);

        printf("日付2\n");
        printf("年 : ");
        scanf("%d", &yyyy2);
        printf("月 : ");
        scanf("%d", &mm2);
        printf("日 : ");
        scanf("%d", &dd2);
        idx2 = CalcIndex(yyyy2, mm2, dd2);

        if(idx1 > idx2){
                printf(">>>%d/%d/%d から %d/%d/%d までは%d日間あります\n",
                        yyyy1, mm1, dd1, yyyy2, mm2, dd2, idx1 - idx2);
        }
        else{
                printf(">>>%d/%d/%d から %d/%d/%d までは%d日間あります\n",
                        yyyy2, mm2, dd2, yyyy1, mm1, dd1, idx2 - idx1);
        }
}


CalcIndex(int yyyy, int mm, int dd)
{
        int     idx;

        if(mm == 1 || mm == 2){
                idx = 365 * yyyy + dd + 31 * (mm - 1) + (yyyy - 1) / 4 -
                        ((yyyy - 1) / 1000 + 1) * 3 / 4;
                return(idx);
        }
        idx = 365 * yyyy + dd + 31 * (mm - 1) - (int)(0.4 * mm + 2.3) +
                yyyy / 4 - (yyyy / 100 + 1) * 3 / 4;
        return(idx);
}
Study Cにロードする Study Cにロードし編集する Study Cにロードし実行する ブラウザとの連携機能が使用可能なStudy Cのバージョンなどについて...
同じ本に載っていた例です。
例) 1960/6/1 - 1976/10/31間の日数 : 5996日
作成したプログラムでも同じ結果が得られました。


[an error occurred while processing this directive]