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

このQ&Aに関連する最新のQ&A

A 回答 (3件)

Windowsの時刻をダブルクリックするととカレンダーが出ます。


これが万年時計になっているようです。
ただし、システム日付ですから,いじることは余りお勧めしませんが。

つぎの方法は計算で求めるものです。1900年1月1日を1日目として
通算日を計算するのです。
1年を365.2422日として(西暦年ー1900)をかけて切捨てすれば
その年の先頭(実は前の日)の通算日が出ます。
後は月日からその年の通算日を出して足します。
この最後の通算日を7で割ると曜日が求まります。
確か、1900年1月1日は日曜日だったような気が。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/16 13:48

有名なのは「ツェラーの公式」です。


昔BASICとCOBOLとMIFESエディタのマクロで作りました。
計算式は、検索していただけば見つかると思います。
とても便利な計算式なのですが、問題があって、2000年
2月28日(この年はうるう年なので29日まで)までは
正確に計算できますが、3月1日以降は途中で負の値が
出て計算不能になります。1900年代が計算基準だからです。
ですから、どこかの年の1月1日の曜日を割り出して
おいて、そこから数えるようにプログラムすれば問題
なくできます。

余談ですが、いわゆるY2K問題も、西暦を下2桁で表した
のとは別に、この計算式を搭載したプログラムでも
起こることが分かりましたよ。マクロの計算結果が
おかしくなったことに気づきました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/17 21:44

No.1のymmasayanです。



>カレンダーもさることながら、十干と十二支を出したいのです。

十干と十二支は年と日の両方ありますね。いずれにしても通算年または通算日を10または12で割れば簡単に(?)求まるでしょう。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/06/17 21:43

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q和暦変換

和暦変換で悩んでいます。
悩んでいるのは明治→大正、大正→昭和で重なっている日についてです。

明治の範囲
明治元年9月8日(1868/10/23)~明治45年7月30日(1912/7/30)
大正の範囲
大正元年7月30日(1912/7/30)~大正15年12月25日(1926/12/25)
昭和の範囲
昭和元年12月25日(1926/12/25)~昭和64年1月7日(1989/1/7)
平成の範囲
平成元年1月8日(1989/1/8)~

ということなんですが、例えば「1912/7/30」を和暦に変換するときは、どちらにすべきなんでしょうか?
ちなみにMicrosoftExcel で入力すると「1912/7/30」→「大正1年7月30日」と表示され
「明治45年7月30日」と入力しても、次のセルに移動すると「大正1年7月30日」となります。
ということは「1912/7/30」は大正と考えるべきなんでしょうか?
(もっともExcel自体が1900/1/1までしか対応しておらず、
明治33年1月1日の前日が明治33年1月0日となるので。。。賢いんだかアレなんだかよくわからない^^;)

同様に「1926/12/25」は昭和でよいのか、大正で良いのかも判りません。

ここら辺が詳しい方、ぜひ教えてくださいませ<(_ _)>

和暦変換で悩んでいます。
悩んでいるのは明治→大正、大正→昭和で重なっている日についてです。

明治の範囲
明治元年9月8日(1868/10/23)~明治45年7月30日(1912/7/30)
大正の範囲
大正元年7月30日(1912/7/30)~大正15年12月25日(1926/12/25)
昭和の範囲
昭和元年12月25日(1926/12/25)~昭和64年1月7日(1989/1/7)
平成の範囲
平成元年1月8日(1989/1/8)~

ということなんですが、例えば「1912/7/30」を和暦に変換するときは、どちらにすべきなんでしょうか?
ちなみにMicrosoftExcel で入力すると「1...続きを読む

Aベストアンサー

こんにちは。maruru01です。

No.1の方の言う通り、
~明治45年7月29日、大正元年7月30日~
~大正15年12月24日、昭和元年12月25日~
でいいのでは?
一応、参考ページ(改元のあたり、「改元の布告」)

http://www.h3.dion.ne.jp/%7Esakatsu/holiday_topic.htm

参考URL:http://www.h3.dion.ne.jp/%7Esakatsu/holiday_topic.htm

Q和暦、西暦の変換について(VBA)

こんにちは、VBAで西暦年から和暦年への変換でエラーが出て原因がよく分かりません。

下のようにして、変換してやろうとしてもyear1,month1,day1の型が違いますとかのエラーが出て、変数の型をInteger、String、
Variantでとろうとしてもエラーばかりです、宜しくお願いします。

もっと簡単に出来る方法があると思うのですが、よく分かりません。
曜日まで「平成○年○月○日(木)」というような表示形式にしたいのです。

year1 = Year(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"))
month1 = Month(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"))
day1 = Day(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"))
youbi1 = Right(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"), 4) - Right(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"), 3)
TextBox3.Value = "平成" + (year1 - 1988) + "年" + month1 + "月" + day1 + "日" + "(" + youbi1 + ")"

こんにちは、VBAで西暦年から和暦年への変換でエラーが出て原因がよく分かりません。

下のようにして、変換してやろうとしてもyear1,month1,day1の型が違いますとかのエラーが出て、変数の型をInteger、String、
Variantでとろうとしてもエラーばかりです、宜しくお願いします。

もっと簡単に出来る方法があると思うのですが、よく分かりません。
曜日まで「平成○年○月○日(木)」というような表示形式にしたいのです。

year1 = Year(Format(Calendar1_F.Value, "yyyy/m/d/(aaaa)"))
month1 = Month...続きを読む

Aベストアンサー

http://www.geocities.jp/okaway03170507/oka1303.htm
まったくそのまんまの回答があります。

Qaccess 和暦をコンボボックスに格納したい

こんばんわ。
コンボボックスに、和暦を今年(現在年度)から明治1年まで、降順に格納したいです。(難しければ、150年度分のみ)

平成22
平成21
平成20

昭和55

明治1

色々調べてユーザー定義関数を、値集合タイプにいれるまではできたのですが、
yearsel = Format(Year(Date) - 365 * row, "ggge")
のところがどうしてもうまくできません。
上記の正しい式をご教授いただけたら助かります。

-------
Function yearsel(fld As Control, ID As Variant, row As Variant, _
col As Variant, code As Variant) As Variant

Select Case code

Case acLBInitialize ' 初期化します。
yearsel = True
Case acLBOpen ' 開きます。
yearsel = Timer ' 固有の ID。
Case acLBGetRowCount ' 行数を取得します。
yearsel = 150 '(明治1年までは難しそう・・・)
Case acLBGetColumnCount ' 列数を取得します。
yearsel = 1
Case acLBGetColumnWidth ' 列幅を取得します。
yearsel = -1 ' 既定の幅を使用します。
Case acLBGetValue ' データを取得します。
yearsel = Format(Year(Date) - 365 * row, "ggge")

End Select

End Function

こんばんわ。
コンボボックスに、和暦を今年(現在年度)から明治1年まで、降順に格納したいです。(難しければ、150年度分のみ)

平成22
平成21
平成20

昭和55

明治1

色々調べてユーザー定義関数を、値集合タイプにいれるまではできたのですが、
yearsel = Format(Year(Date) - 365 * row, "ggge")
のところがどうしてもうまくできません。
上記の正しい式をご教授いただけたら助かります。

-------
Function yearsel(fld As Control, ID As Variant, row As Variant, _
col As Variant, ...続きを読む

Aベストアンサー

明治元年の式を間違えました。
Dim i As Integer
Dim targetYear As Date
i=0
targetYear = Date

Do While Year(targetYear) >= 1868

targetYear = DateAdd("yyyy",-i , Date)
ComboBox.AddItem format(targetYear,"gggee")
i=i+1
Loop

Qユリウス日から和暦(江戸時代を含め)表示は?

年号だけで西暦和暦変換はよくあるようですが、月日を含めての変換で、どうすればいいでしょうか。
和暦のアルゴリズムがよくわからないとできないと思いますが、・・・
また、別の方法がありますか。どのような方法が良いでしょうか。

Aベストアンサー

どれくらい厳密な変換が必要かによります。
実際、和暦と一口に言ってもかなり難しいんですよ。
現在、旧暦といっているのは明治5年以降の考え方で、日本標準時(東経135度の平均太陽時)を使った太陽太陰暦です。

しかし、それ以前の歴法は、貞享暦(1685年より)、宝暦暦、寛政暦、天保暦と移り変わっており、旧暦とは微妙にずれます。貞享暦以前は中国暦です。むしろこちらの方を旧暦に対して和暦と呼ぶことが多いようです。主には天保暦より前の恒気法と天保暦の定気法に分けられます。

一般的には旧暦換算が使われています。ただし、それは正確なものではないということです。

旧暦について
http://koyomi8.com/reki_doc/doc_0100.htm

旧暦の決め方
http://koyomi8.com/reki_doc/doc_0101.htm

参考URL:http://www.geocities.jp/planetnekonta2/hanasi/2033mondai/2033mondai.html

Qどうすればできますか?

携帯電話から位置情報付きの画像を添付したメールを受け取り、それをGoogleMapに登録するようなシステムを作ろうと思います。
が、どうやって作ればいいかネットで調べていてわかりません。僕が見ているページがよくないのかもしれませんが、参考になるページなど教えてください。

困ってます。回答よろしくお願いします。

Aベストアンサー

検索エンジンで、「携帯 位置情報取得」とすればいろいろなサイトが見つかるようです。

例示として参考URLのように、
au携帯から位置情報+alphaを入手する方法を挙げておきます。

参考URL:http://www.surveytec.com/groom/landmark/au_cgi.html


人気Q&Aランキング

おすすめ情報