- ベストアンサー
自作のFloraの公式で年月日から曜日を計算する方法
- Floraの公式を使用して、年月日から曜日を計算する方法を紹介します。
- Floraの公式は、Y年M月D日の曜日を返す式であり、独自の計算方法を用いています。
- 詳しい証明や式の解説は、ブログ『心善淵』の関連記事で確認できます。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
どう見ても、ツェラーの公式としか思えないんですが、 これが独立した解であるといえるのでしょうか。 たんなるツェラーの公式の変形ですよね。
その他の回答 (6)
- JaritenCat
- ベストアンサー率37% (122/322)
ぼくが知っているツェラーの公式はこれです。 W=(Y+[Y/4]-[Y/100]+[Y/400]+[26*(M+1)/10]+D-1)%7 (Mは3~14、日曜日が0) R+[R/4]-[Y/100]+[Y/400]+[2.6*M + 2.7]+D-1 のうち、 R=Y%28は、後で%7するのでY%28%7=Y%7からRをYにしても答えは同じ。 [2.6*M+2.7]は、M=3~14で[2.6*M+2.6]と同じ。(=[26*(M+1)/10]) ということは、ツェラーの式と全く同じ式になりますので、Floraの式で正しい値が計算できるでしょう。 ちなみに、ツェラーの式はいろいろなバリエーションがあるようで、 よく見かける式はこう変形します。 W=(Y+[Y/4]-[Y/100]+[Y/400]+[26*(M+1)/10]+D-1)%7 Y=100*C+N として、年のところだけ計算 Y+[Y/4]-[Y/100]+[Y/400] =(100*C+N)+[25*C+N/4]-C+[C/4] =124*C+N+[N/4]+[C/4] ※25*Cは整数なので[]の外に出した =(18*7-2)*C+N+[N/4]+[C/4] 18*7は後で%7をするので消してもおなじ → -2*C+N+[N/4]+[C/4] W=(D+[26*(M+1)/10]+N+[N/4]+[C/4]-2*C-1)%7 他に変形版として、[26*(M+1)/10]-1 = [2.6*M+1.6] = [(13*M+8)/5]もありますね。
お礼
丁寧な解説、ありがとうございます。 ツェラーの公式に、このようなパターンがあるとは知らなかったです。 私の数学の知識も中途半端なもののため、このようなことに気が付かなかったようです。 なぜ28という数字が出てきたかというと、7と4の最小公倍数という点からです。詳しくはブログの証明をみていただけたら幸いです。 私が高校~大学一年のころに作った公式です。やっとすっきりしました。ありがとうございました。
- Barsoom
- ベストアンサー率60% (3/5)
No.5の誤字を訂正します。 少数部 ⇒ 小数部 失礼しました。
お礼
丁寧な解説、ありがとうございます。 私の数学の知識も中途半端なもののため、このようなことに気が付かなかったようです。 なぜ28という数字が出てきたかというと、曜日の数の7とうるう年の周期の4の最小公倍数という点からです。詳しくはブログの証明をみていただけたら幸いです。 私が高校受験~大学一年のころに作った公式です。やっとすっきりしました。結局、別の道をたどっても、行きつく結論は同じということでしょうか。 ありがとうございました。勉強不足だったなと感じております。
- Barsoom
- ベストアンサー率60% (3/5)
R は Y のままでも結果が同じなので,あえてひと手間かけて,あらかじめ R を求めるのは意味がないですね。 [2.6*M+2.7] の2.7の少数部は,0.6以上0.8未満で計算が成り立ちます。 したがって,この2.7を2.6とすると,ツェラーの公式の [26(M+1)/10] と同じです。 自力で公式を導かれた頭脳には敬服しますが,No.4の方の回答と同じ評価にならざるを得ません。
- JaritenCat
- ベストアンサー率37% (122/322)
すいませんタイプミスです。 =(1901%28)+[(1901%28)/4]-[1901/100]+[1901/400]+[2.6*11+2.7]+1-1
- JaritenCat
- ベストアンサー率37% (122/322)
No.1さんは計算が違ってますね。。 1901年11月1日の場合・・・ Flr(1901,11,1) =(1901%28)+[(1901%28)/4]-[1900/100]+[19900/400]+[2.6*11+2.7]+1-1 =25+6+19+4+31+1-1 =47 47%7=5 (金曜日) [2.6*M+2.7]の部分は、[2.6*M+2.6]でも同じなので、[26*(M+1)/10]とも書けます。ツェラーの公式はこれを使ってますね。 公式が合っているかどうかは検証してません。。すいません
お礼
コメントありがとうございました。 上記にて計算は正しいです。実際に金曜でした。エクセルのweekday関数で確認しました。 他の方のコメントを参考にすると、結局はツェラーの公式と同じ内容とのことです。ちょっとがっかりですが、勉強になりました。私は勉強不足だったなと感じております。 このようなつまらない投稿にコメントしていただきありがとうございました。
- at9_am
- ベストアンサー率40% (1540/3760)
えーと、 > Flr(Y,M,D) = R + [R/4] - [Y/100] + [Y/400] + [2.6*M + 2.7] + D - 1 (R = Y%28) Y, M, D=(1900, 10,1) で試す(1901年11月1日)と、 Flr(1900,8,1) = R + [R/4] - [Y/100] + [Y/400] + [2.6*M + 2.7] + D - 1 (R = Y%28) = mod(1900, 28)+mod(1900/4, 28) - (Y/100) + 28.7 = 9.7 となって、整数にすらなりません。 したがって、おかしいですね。
お礼
コメントありがとうございます。 他の方のコメントも参考にすると、ツェラーの公式と同じとのことです。 確かに、そのようです。私の勉強不足でした。