• ベストアンサー

万年暦を導き出すプログラミング

来訪者が少しでも増えればと、試しに占いのページを作ってみたいと思うのですが、そこで一番困ったのは、四柱推命等で使う万年暦の求め方です。膨大な万年暦を打ち込むのは大変だし、ミスも起こりうることなので、何かいいプログラミング方法、もしくはサンプルソースなどはどこかにないでしょうか。 あるいは公開された万年暦の既存の物があれば、可能なら使わせていただければ幸いです。 言語は問いません。

質問者が選んだベストアンサー

  • ベストアンサー
  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

Windowsの時刻をダブルクリックするととカレンダーが出ます。 これが万年時計になっているようです。 ただし、システム日付ですから,いじることは余りお勧めしませんが。 つぎの方法は計算で求めるものです。1900年1月1日を1日目として 通算日を計算するのです。 1年を365.2422日として(西暦年ー1900)をかけて切捨てすれば その年の先頭(実は前の日)の通算日が出ます。 後は月日からその年の通算日を出して足します。 この最後の通算日を7で割ると曜日が求まります。 確か、1900年1月1日は日曜日だったような気が。

rapi1
質問者

お礼

ありがとうございます。 カレンダーもさることながら、十干と十二支を出したいのです。 いわゆる、 甲・乙・丙・丁・戊・己・・・ 子・丑・寅・卯・辰・巳・午・・・ といったものです。 これを効率よく求める方法はないものかと。

その他の回答 (2)

回答No.3

有名なのは「ツェラーの公式」です。 昔BASICとCOBOLとMIFESエディタのマクロで作りました。 計算式は、検索していただけば見つかると思います。 とても便利な計算式なのですが、問題があって、2000年 2月28日(この年はうるう年なので29日まで)までは 正確に計算できますが、3月1日以降は途中で負の値が 出て計算不能になります。1900年代が計算基準だからです。 ですから、どこかの年の1月1日の曜日を割り出して おいて、そこから数えるようにプログラムすれば問題 なくできます。 余談ですが、いわゆるY2K問題も、西暦を下2桁で表した のとは別に、この計算式を搭載したプログラムでも 起こることが分かりましたよ。マクロの計算結果が おかしくなったことに気づきました。

rapi1
質問者

お礼

「ツェラーの公式」ですね。調べてみて参考にさせていただきます。解説ありがとうございました。

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.2

No.1のymmasayanです。 >カレンダーもさることながら、十干と十二支を出したいのです。 十干と十二支は年と日の両方ありますね。いずれにしても通算年または通算日を10または12で割れば簡単に(?)求まるでしょう。

rapi1
質問者

お礼

再度回答ありがとうございました。

関連するQ&A