C言語関係掲示板

過去ログ

No.1340 日数間計算

[戻る] [ホームページ]
No.17973

日数間計算
投稿者---hiro(2004/11/11 14:03:43)


以下のような日数間計算の計算方法を見つけました。
調べてみたのですが、参考資料などがなく、式の意味がイマイチ良くわかりません。
どなたかこの計算式の解釈わかるかたいらっしゃいませんか?
ちなみに
yyyy=年
mm=月
dd=日
を意味しています。

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);
}




No.17975

Re:日数間計算
投稿者---REE(2004/11/11 14:19:38)


>以下のような日数間計算の計算方法を見つけました。
>調べてみたのですが、参考資料などがなく、式の意味がイマイチ良くわかりません。

どこが分からないのか分かりません。

また、関連する質問は同じスレッドで続けて下さい。



No.17976

Re:日数間計算
投稿者---hiro(2004/11/11 14:31:26)


わからない個所は、
まず、なんでif文で1,2月とその他に分けて処理するのかです。
そしてif文内の計算式がどうしてこうなるのかわかりません。



>>以下のような日数間計算の計算方法を見つけました。
>>調べてみたのですが、参考資料などがなく、式の意味がイマイチ良くわかりません。
>
>どこが分からないのか分かりません。
>
>また、関連する質問は同じスレッドで続けて下さい。




No.17980

Re:日数間計算
投稿者---επιστημη(2004/11/11 15:12:10)


>まず、なんでif文で1,2月とその他に分けて処理するのかです。

うるう年の日数調整のため、1,2月は前年の13,14月とみなすから。

>そしてif文内の計算式がどうしてこうなるのかわかりません。

「4年に1度うるう年/100年に1度うるう年をやめる/400年に1度うるう年復活」
だから。




No.17981

Re:日数間計算
投稿者---hiro(2004/11/11 15:27:51)


おお、的確なご回答ありがとうございます。
うるう年のための日数調整とは具体的にどういうことですか?




>>まず、なんでif文で1,2月とその他に分けて処理するのかです。
>
>うるう年の日数調整のため、1,2月は前年の13,14月とみなすから。
>
>>そしてif文内の計算式がどうしてこうなるのかわかりません。
>
>「4年に1度うるう年/100年に1度うるう年をやめる/400年に1度うるう年復活」
>だから。
>




No.17982

Re:日数間計算
投稿者---επιστημη(2004/11/11 15:47:12)


>おお、的確なご回答ありがとうございます。
>うるう年のための日数調整とは具体的にどういうことですか?

「うるう年はいつもより一日多い」ということ。



No.17983

Re:日数間計算
投稿者---hiro(2004/11/11 15:53:15)


すみません、ききかたがおかしかったです.
正確には、なぜ日数調整するために1、2月を13、14月とするのですか?

あと式の細かい解説をしていただけると助かります。
もうしわけありませんが、よろしくお願いいたします。

>>おお、的確なご回答ありがとうございます。
>>うるう年のための日数調整とは具体的にどういうことですか?
>
>「うるう年はいつもより一日多い」ということ。




No.17984

Re:日数間計算
投稿者---επιστημη(2004/11/11 15:57:47)


>正確には、なぜ日数調整するために1、2月を13、14月とするのですか?

末尾を調整するほうが(途中より)楽だから。

>あと式の細かい解説をしていただけると助かります。

ツェラーの公式 / ゼラーの公式 / Zellerの公式
などでgoogle漁ればいくらでも出てきます。


No.17985

Re:日数間計算
投稿者---hiro(2004/11/11 15:59:00)


そう言う公式の名前だったんですね。
ありがとうございます。
これで勉強がすすみそうです。

>>正確には、なぜ日数調整するために1、2月を13、14月とするのですか?
>
>末尾を調整するほうが(途中より)楽だから。
>
>>あと式の細かい解説をしていただけると助かります。
>
>ツェラーの公式 / ゼラーの公式 / Zellerの公式
>などでgoogle漁ればいくらでも出てきます。



No.17987

Re:日数間計算
投稿者---hiro(2004/11/11 17:04:45)


もうひとつお聞きしたいのですが、
入力で2010年10月10日、現在のシステム日付が2004年10月25日だとします。
この差を日数で求めました。
今度、この求めた日数を年月日に変換してやる(求めた日数が400日だった場合は変換すると1年1ヶ月と4日)にはどうしたらよいでしょか?
もちろんこれも閏年を考慮します。
質問ばかりですみませんが、よろしくお願いします。

>そう言う公式の名前だったんですね。
>ありがとうございます。
>これで勉強がすすみそうです。
>
>>>正確には、なぜ日数調整するために1、2月を13、14月とするのですか?
>>
>>末尾を調整するほうが(途中より)楽だから。
>>
>>>あと式の細かい解説をしていただけると助かります。
>>
>>ツェラーの公式 / ゼラーの公式 / Zellerの公式
>>などでgoogle漁ればいくらでも出てきます。




No.17988

Re:日数間計算
投稿者---かずま(2004/11/11 18:16:53)


> 今度、この求めた日数を年月日に変換してやる(求めた日数が400日だった
> 場合は変換すると1年1ヶ月と4日)にはどうしたらよいでしょか?

日数だけから、年数、月数、日数を求めることはできません。

2004年11月11日の 400日後は、2005年12月15日です。
2005年12月15日は、2004年11月11日の 1年1ヵ月4日後です。

2004年 2月11日の 400日後は、2005年 3月17日です。
2005年 3月17日は、2004年 2月11日の 1年1ヵ月6日後です。


【掲示板ご利用上の注意】にあるように、引用は必要最小限にしてください。


No.18000

Re:日数間計算
投稿者---hiro(2004/11/11 19:32:11)


回答ありがとうございます。
起点(開始日)がわからないと微妙に日にちがずれると言うことでしょうか?
仮に起点(開始日)の情報を持っていて日数を年月日のかたちにしてやるにはどうしたらいいでしょうか?



>> 今度、この求めた日数を年月日に変換してやる(求めた日数が400日だった
>> 場合は変換すると1年1ヶ月と4日)にはどうしたらよいでしょか?
>
>日数だけから、年数、月数、日数を求めることはできません。
>
>2004年11月11日の 400日後は、2005年12月15日です。
>2005年12月15日は、2004年11月11日の 1年1ヵ月4日後です。
>
>2004年 2月11日の 400日後は、2005年 3月17日です。
>2005年 3月17日は、2004年 2月11日の 1年1ヵ月6日後です。
>
>
>【掲示板ご利用上の注意】にあるように、引用は必要最小限にしてください。



No.18005

Re:日数間計算
投稿者---REE(2004/11/11 20:15:22)


>回答ありがとうございます。
>起点(開始日)がわからないと微妙に日にちがずれると言うことでしょうか?
>仮に起点(開始日)の情報を持っていて日数を年月日のかたちにしてやるにはどうしたらいいでしょうか?

というか、開始日も終了日も分かっているのだから、そこから直接求めればよいでしょう。
年・月・日それぞれで繰り下がりを考慮して差を求めればよいでしょう。
日数が逆転している場合だけ少しややこしいですが・・・



No.18155

Re:日数間計算
投稿者---hiro(2004/11/16 06:25:49)


いまいち差求め方がわからないのですが、
どなたかサンプルのソースなど教えていただけないでしょうか?

>>回答ありがとうございます。
>>起点(開始日)がわからないと微妙に日にちがずれると言うことでしょうか?
>>仮に起点(開始日)の情報を持っていて日数を年月日のかたちにしてやるにはどうしたらいいでしょうか?
>
>というか、開始日も終了日も分かっているのだから、そこから直接求めればよいでしょう。
>年・月・日それぞれで繰り下がりを考慮して差を求めればよいでしょう。
>日数が逆転している場合だけ少しややこしいですが・・・




No.18156

Re:日数間計算
投稿者---んんんn(2004/11/16 08:20:16)


>いまいち差求め方がわからないのですが、
>どなたかサンプルのソースなど教えていただけないでしょうか?

説明は十分にもらえていると思います。
アルゴリズムのいい勉強と思ってもう少し頑張ってみてはいかがでしょう。
デバッガで追いかけるのも大事ですが、
カレンダを前にして実際に数えてみるのも有効です。
物事から法則性を導き出すのがアルゴリズム/プログラムの基本だと
思います。


No.18187

Re:日数間計算
投稿者---かずま(2004/11/17 10:59:54)


> 物事から法則性を導き出すのがアルゴリズム/プログラムの基本だと
> 思います。
私もそう思います。

時間の計算だと誰でもできますよね。

    11時45分21秒
  -  8時28分43秒
  ---------------
     3時16分38秒

21秒から 43秒を引けないので、44分81秒から 28分43秒を引くんです。


    2005年12月10日
  - 2004年11月17日
  -----------------
       1年 0月23日

10日から 17日を引けないので、11月40日から 11月17日を引くんです。

時間の場合 1分は60秒と固定ですが、月の場合 11月は 30日という知識が
必要です。2月はもっと複雑です。


プログラムはすぐに書けますが、元の質問者は、【掲示板ご利用上の注意】に
逆らって、常に全文引用を続けるので、私はもう回答しません。