太陽暦>太陰歴 変換プログラム

このエントリーをはてなブックマークに追加
1あやめ
世界史板の皆様 あけましておめでとうございます。
本年も宜しくお付き合いください。
年の初めの例とて....あやめもスレッドを立てようと思い立ちました。
皆様のお役に立ち、年頭に相応しいものと考えた挙句
東アジアの太陰太陽暦を現行グレゴリウス暦&その前身ユリウス暦の日付に変換するPC用プログラムは歴史研究者に要望されているのではないかと思いつきました。
7年ほど前にあやめは叔父からシステムの基本仕様を与えられて、N88BASICによりプログラムを作成したことがあります。
それは任意の太陽暦年次と任意の地点経度を入力し、これに対応する太陰太陽暦(時憲暦=天保暦)の各月暦表を編制し、一覧表としてファイルまたはプリンタに出力するというものです。
このプログラムのコードを適宜のモジュールに分割し、解説と共に公開したいと思います。
精度は数千年前で十数分内に収まるものとして成果を得ていますので実用性は十分と信じています。
このスレはあやめが一方的に提示するものなので、基本的にレスを期待するものではなく、2ちゃんねるとしては些か変則的なものとなりますが、皆様からの質問や提案には対応していきたいと思っています。
実際の連載は明日からとなります。
2世界@名無史さん:02/01/02 00:00
あけましておめでとう、あやめ女史。
なんやら大掛かりな計画ですな。
楽しみにしております。
3あやめ:02/01/02 00:02
ごめんなさい、タイトルの「太陰暦」が「歴」に誤変換されてました。
4世界@名無史さん:02/01/02 00:07
5世界@名無史さん:02/01/02 00:07
イスラム暦も入れてくれ。
6世界@名無史さん:02/01/02 00:17
>>4
なんだ、いきなり大敗してるな。
駄スレ決定?
7世界@名無史さん:02/01/02 00:53
お、あやめさんだ。お久しぶり?
8世界@名無史さん:02/01/02 01:16
おや、あやめさん、お久しぶりです。

暦の変換ソフトはそれなりにありますけど、任意の地点経度で太陰太陽暦が得られるってのが
キモですかね。

それにしても、なかなか多芸なんですね。

また、書き込みをお待ちしてます。
9世界@名無史さん:02/01/02 03:09
1さんの文読むだけで、気合入れて読まないと理解できなかった。
本当に多芸ですね。
応援しています。あやめさん頑張ってください。
10あやめ:02/01/02 10:14
>>4-6
whenというフリーウェアの存在は前から承知してます、なかなかのスグレモンだと思います。だけどどんな処理をしてるのか中身はブラックボックスでしょ。それにあれに付いてくるドキュメントが今一で判りにくかった。
あやめのはコードを公開するってとこがキモです。
11世界@名無史さん:02/01/02 12:36
ちょっと話しの腰を折ってしまうかもしれませんが…
昨日某公共放送を見てる時、お隣りの国中継でこちらは太陰暦だから
新年の祝いはやってないのです。まだ、太陰暦の国があるんですねえ
と報道していた。

某公共放送の無知ぶりには感心した…キリスト教の祭り、イスラムの
祭り、仏教の祭り、日本の24節も全部太陰暦で、日付暦だけが太陽
暦なのだというのを知れと思った…

さっさと太陰暦を併用使用して欲しいと思ってます。去年の7月少雨
だったが、太陰暦だと簡単に説明がつく…去年は水無月が2ヶ月あっ
て7月は丸々水無月だったんだ…
12名無しさん:02/01/02 12:43
>>11
二十四節気は太陽の位置だけで決まるので、太陰暦では
ないと思いますが……。
13世界@名無史さん:02/01/02 12:48
>>1
言語は何ですか?
14世界@名無史さん:02/01/02 13:16
>>11
というか、いくら韓国でも太陰暦は使っていないだろう。単に旧暦で正月を祝うというだけの
ことだろ。中国やベトナムも旧正月が中心じゃなかったかな。
それと、仏教の彼岸会は別に太陰暦じゃないように思うが。
15名無しさん:02/01/02 18:17
>>11
> さっさと太陰暦を併用使用して欲しいと思ってます。

旧暦(太陰太陽暦)という意味であれば、六曜と二十四節気が
書いてあるカレンダーがあれば簡単に旧暦の日付が分かるので、
それで十分でしょう。
16あやめ:02/01/02 19:28
>>12
太陰暦という名称は誤解を招くものだと思います。太陰太陽暦というのも同様です。
太陽太陰暦と言う方がより本質を表現したものかと思います。
つまり太陽の運行が一年の枠組みとなっていて、それに太陰の運行をどのように組み込むかというところに編暦のテクが示されているわけです。
>>13
1にも書いておきましたが昔NECのマシンを買うと漏れなく付いてきた、タコでもサルでも習得できるN88BASICです。
CへCへと草木も靡いたときに少しCも齧りましたが直ぐ挫折してしまいました。
その後もオブジェクト指向だインヘリタンスだ構造化だイベントドリヴンだと、色んな誘惑がありましたがオミアイだけで御縁がありませんでした。
17世界@名無史さん:02/01/02 19:43
いまどきN88を教えられて、使える人は限られてるね。
せめてVBくらいにしてYO!
18あやめ:02/01/02 19:44
それではどんなことをやるのか出力サンプルを示します。
上にも書いたとおり太陽の運行ポイントを表す二十四気を1年の骨組みとして、太陰の出現ポイントである新月によって区切られる暦月周期を対応させるシステムが太陰暦というわけですから、太陽月と太陰月を対応させたリストを獲得する作業が必要なわけです。
このリストは半角80列で60行ほどのものになりますので、2分割して表示することとします。
19世界@名無史さん:02/01/02 19:44
>>11
ネタですか。本気だとしたら11の言ってることがでたらめなんだが
20あやめ:02/01/02 19:46
丙子歳 J.P. 4609 / B.C. 105 年 東経 108 度 55 分

太 陽 太 陰 暦 月 対 応 表

太 陽 月 太 陰 月

孟春節 立春 -105/ 2/ 7 2: 6 壬寅 火 正月朔 -105/ 2/ 3 20:46 戊戌 金
1683108.2850217 大 1683105.0630078 29.7543234
中 雨水 -105/ 2/22 3:59 丁巳 水 望 -105/ 2/18 20: 7 癸丑 土
1683123.3636943 30.5692450 1683120.0360730
仲春節 驚蟄 -105/ 3/ 8 9: 9 壬申 木 二月朔 -105/ 3/ 4 14:52 戊辰 日
1683138.5790718 大 1683134.8173311 29.6853455
中 春分 -105/ 3/23 17:39 丁亥 金 望 -105/ 3/19 4:51 癸未 月
1683153.9329393 31.0837610 1683149.4002029
季春節 清明 -105/ 4/ 8 5:17 癸卯 日 三月朔 -105/ 4/ 3 7:19 戊戌 火
1683169.4181407 小 1683164.5026767 29.5853310
中 穀雨 -105/ 4/23 19:39 戊午 月 望 -105/ 4/17 12:54 壬子 火
1683185.0167003 31.4261638 1683178.7355273
孟夏節 立夏 -105/ 5/ 9 12: 6 甲戌 水 四月朔 -105/ 5/ 2 21:22 丁卯 水
1683200.7021901 大 1683194.0880077 29.4884891
中 小満 -105/ 5/25 5:53 庚寅 金 望 -105/ 5/16 21: 7 辛巳 水
1683216.4428641 31.4969165 1683208.0778836
仲夏節 芒種 -105/ 6/10 0: 5 丙午 日 五月朔 -105/ 6/ 1 9: 5 丁酉 金
1683232.2012640 小 1683223.5764968 29.4191181
中 夏至 -105/ 6/25 17:48 辛酉 月 望 -105/ 6/15 6:40 辛亥 金
1683247.9397806 31.2715589 1683237.4752516
季夏節 小暑 -105/ 7/11 10: 8 丁丑 水 六月朔 -105/ 6/30 19: 9 丙寅 土
1683263.6201825 大 1683252.9956149 29.3796317
中 大暑 -105/ 7/27 0:19 癸巳 金 望 -105/ 7/14 18:28 庚辰 土
1683279.2113395 30.8212333 1683266.9674788
21あやめ:02/01/02 19:51
失敗~へ~ フォームが崩れちゃった
>>17
基本BASICにしておけばVBにも容易に移植できます
VBのソフト持ってない人もいるしね
BASICは、とうのむかしに忘れてしまったけど、
ソースを理解できたらJavaへの移植に挑戦してみます。

で、無事に移植できたら、
アプレットかなにかにして、
ネット上で公開しても、よろしいでしょうか。

# なには、ともあれ、たのしみたのしみ♪
23あやめ:02/01/02 20:23
スペースにアンダーバーを入れてフォームの崩れを防止したつもり(さげで)

_______丙子歳__J.P._4609__/_B.C._105_年____東経__108_度__55_分

_______________太__陽__太__陰__暦__月__対__応__表

_______太_____陽_____月_________________________太_____陰_____月

___孟春節_立春_-105/_2/_7__2:_6_壬寅___火___正月朔_-105/_2/_3_20:46_戊戌___金
_______________1683108.2850217________________大___1683105.0630078__29.7543234
_______中_雨水_-105/_2/22__3:59_丁巳___水_______望_-105/_2/18_20:_7_癸丑___土
_______________1683123.3636943__30.5692450_________1683120.0360730
24:02/01/02 20:31
>>22
そりゃ面白そう
>>21
コンパイルしたらVBそのものは必要ありません
通常のWindowsアプリケーションとして動きますよ
Windows上でN88 BASICを走らせるフリーソフト。

N88互換BASIC for Windows95
http://www.vector.co.jp/soft/win95/prog/se055956.html
26あやめ:02/01/02 21:25
福袋っつーか折角おいでになった方に手ぶらもなんだから、グレゴリオ暦日をユリウス暦日に変換するプログラム、BASIC忘れた人のための解説は明日書きます
アンダーバーは無視してね
10_Rem_GJ____(-3602,2,1-4101,2,28)__63,8,16.23:15
20_Rem_グレゴリオ暦日をユリウス暦日に変換
100_Dim_MD(12):_For_M_=_1_To_12:_READ_MD(M):_Next
110_Data_31,_30,_31,_30,_31,_31,_30,_31,_30,_31,_31,_28
120_INPUT_Y,M,D
130_If_Y_<_0_Then_Y_=_Y_+_1
140_Z_=_Abs(Y)
150_If_Z_Mod_400_=_0_Then_GoTo_190
160_If_Z_Mod_100_=_0_Then_GoTo_180
170_If_Z_Mod_4_=_0_Then_GoTo_190
180_If_M_=_2_And_D_>_28_Then_GoTo_120
190_M_=_M_-_2
200_If_M_<=_0_Then_M_=_M_+_12:_Y_=_Y_-_1
210_If_Z_Mod_4_=_0_Then_MD(12)_=_29
220_X_=_Y:_If_Y_<=_0_Then_X_=_Y_+_1
230_C_=_X_\_100:_T_=_C_\_4:_S_=_T_+_2:_R_=_C_-_S:_D_=_D_-_R
240_If_D_>_0_And_D_<=_MD(M)_Then_GoTo_300
250_If_D_<=_0_Then_M_=_M_-_1_Else_GoTo_280
260_If_M_<=_0_Then_M_=_M_+_12:_Y_=_Y_-_1
270_D_=_MD(M)_+_D:\GoTo_300
280_If_D_>_MD(M)_Then_D_=_D_-_MD(M):_M_=_M_+_1
290_If_M_>_12_Then_M_=_M_-_12:_Y_=_Y_+_1
300_M_=_M_+_2
310_If_M_>_12_Then_M_=_M_-_12:_Y_=_Y_+_1
320_If_Y_<=_0_Then_Y_=_Y_-_1
330_Print_Y,_M,_D
27あやめ:02/01/02 21:30
ユリウス暦日をグレゴリオ暦日に変換するプログラムは明日書きます
>>26 あやめたん。
これなら、どうにか理解できそう♪
29世界@名無史さん:02/01/03 00:52
キリスト教の欧米では、年末はクリスマス。太陰太陽暦のアジア諸国では、
旧正月。日本の、グレゴリオ暦の年末年始に旧正月の年末年始の習慣を
移行した風習は、日本独特という感じがします。
このような年末年始を過ごす国が日本以外にあるのでしょうか。
>>26 あやめたん。
100〜110 MDという名の1〜12の配列を作り、3月〜2月の日にちを代入。

120 変換する「年」「月」「日」の入力を受け付ける。
130 YがマイナスだったらYの値をブラス1。
140 Yの絶対値をZに代入。

150 Zが400で割りきれるのなら190行へ。
160 400では割りきれないが100でなら割りきれるのなら180行へ。
170 100でも割りきれないが4でなら割りきれるのなら190行へ。

180 この年は、うるう年ではない。
もし入力された月が2月で、日にちが28より大きかったら、
120行にもどっで、「年」「月」「日」の入力をやり直させる


// とりあえず、比較的わかりやすそうな前半部分だけ、
// 勝手に解説してみました。あとアンダーバーはないほうが見やすいかと。
// ただし2chでは二つ以上の半角スペースは、一つの半角スペースに、
// タブは、たしか省略されしまったかと思います。

// ところで270行の「GoTo」の前の「\」は「_」のまちがいですよね?
31あやめ:02/01/03 18:29
>がばろんたん
いつも御親切には心から感謝しております、今年も宜しくね、ちゅきちゅきちゅっ
>// ところで270行の「GoTo」の前の「\」は「_」のまちがいですよね
さようでございます、御免なさいm(__)m
皆様も御訂正を
>// ただし2chでは二つ以上の半角スペースは、一つの半角スペースに、
そうだったんですか、やってみます
解説は明日に延期してユリウス暦日をグレゴリオ暦日に変換するプログラムをカキコしときます
32あやめ:02/01/03 18:57
ユリウス暦日をグレゴリオ暦日に変換するプログラム
10 Rem JG (-3602,3,2-4101,1,30) 63,8,16.23:15
20 Rem ユリウス暦日をグレゴリオ暦日に変換
100 Dim MD(12): For M = 1 To 12: READ MD(M): Next
110 Data 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28
120 INPUT Y,M,D
130 If Y < 0 Then Y = Y + 1
140 Z = Abs(Y)
150 If Z Mod 4 = 0 Then GoTo 170
160 If M = 2 And D > 28 Then GoTo 120
170 M = M - 2
180 If M <= 0 Then M = M + 12: Y = Y - 1
190 If Z Mod 400 = 0 Then GoTo 220
200 If Z Mod 100 = 0 Then GoTo 230
210 If Z Mod 4 <> 0 Then GoTo 230
220 MD(12) = 29
230 X = Y: If Y <= 0 Then X = Y + 1
240 C = X \ 100: T = C \ 4: S = T + 2: R = C - S: D = D + R
250 If D > 0 And D <= MD(M) Then GoTo 310
260 If D <= 0 Then M = M - 1 Else GoTo 290
270 If M <= 0 Then M = M + 12: Y = Y - 1
280 D = MD(M) + D: GoTo 310
290 If D > MD(M) Then D = D - MD(M): M = M + 1
300 If M > 12 Then M = M - 12: Y = Y + 1
310 M = M + 2
320 If M > 12 Then M = M - 12: Y = Y + 1
330 If Y <= 0 Then Y = Y - 1
340 Print Y, M, D
33あやめ:02/01/03 19:30
おかげさまで今度はうまく半角スペースが入りました
おことわりしとかなくてはならないのは、ここでのユリウス暦とはあくまでシステマティックな意味で、ヒストリカルなものではないことです
世界史板の方は御存知と思いますが、ユリウス暦は46B.C.に制定されて間もなく置閏を誤り、その修正のため今度は置閏を省くということを行って、8A.D.から本来の規則で置閏されることになったわけです。
しかしこのプログラムではそうした歴史の実際は無視し、本来の暦法で且つ制定以前に遡って計算することにしています。現に天文学上はこのような方法によってユリウス暦を実用しているようです。
10行目の括弧内の数字は各プログラムの有効期間を示したものです、JGであれば前3602年3月2日から後4101年1月30日までの確度を保証します
括弧の次に書いてあるのが開発(ってほどのもんでもないけど^^;)年月日時分です、但し63は1963年じゃなく発注者で国粋主義者の叔父のコダワリで昭和63年です
そんな前だったかな?自分でも忘れてた、あまり昔のことでコード読んで自分で何でこんな処理したか考えちゃった、ドキュメント作っとかないとダメね
34:02/01/03 21:15
ざっと。

● 原理
・「年度」の導入
 ユリウス暦(以下J暦とする)とグレゴリオ暦(以下G暦とする)の差が生じるとすれば、
それは2月29日があるかないかである。
従って、G暦のある年号Yを取ると、その3月1日から翌年の2月28/29日までは、
J暦に対して同じ差Rを持つことになり、その差はYだけの関数となる。
逆に、あるJ暦の年号Yを取ると、その3月1日から翌年の2月28/29日までは、
G暦に対して同じ差Rを持つことになり、その差RはYだけの関数となる。
(境界条件が微妙だが問題は無い)
このため、ある年の3月1日から翌年の2月28/29日を一まとめにして考えるとわかりやすい。
そこで、入力YMDに対し、3月〜12月はY、1月〜2月はY=Y−1とし、Yをその日付の「年度」とする。

・差の算出
ある「年度」Yに対するG暦とJ暦の差Rを計算する。同じ日付の、G暦に対するJ暦の遅れを正ととる。
Rは次の性質を持つ。
1) 100で割り切れる年ごとに1増える
2) ただし400で割り切れる年は変化しない
3) Y=1582でD=10である

1)と2)は
 Y%100−Y%400+定数
で表現できる。
3)により
 1582%100−1582%400+定数=10
であるから定数=−2である。
BASICで表現すると
230_C_=_X_\_100:_T_=_C_\_4:_S_=_T_+_2:_R_=_C_-_S:_D_=_D_-_R

● 実装
G暦−>J暦,J暦−>G暦 共通

1)与えられた入力Y,M,Dに対し、M=M−2として、3月1日〜2月28/29の「年度」Yを計算する。1月,2月の場合には前年度にしてしまう。
2)Yの関数としてG暦とJ暦の差Rを計算する
3)入力YMDに対し修正をおこなう
4)変換後の暦の閏、非閏に沿って修正

● マイナス年号
 0年という年号はないが、400年ごと、100年ごとという計算に適合させるため内部的にY=Y+1とする。
 出力するときにY=Y-1として元に戻す。

● 限界
 プログラムでは一月以上の遅れに対する処理をしていないため、入力範囲が限定される。

・G暦ー>J暦 R>0
G暦の3月1日に対し対応するJ暦が閏年の場合R>29、またはJ暦の非閏年の場合R>28の時、処理が破綻する。R=29になるYは4100であるが、J暦は閏年である。
翌年Y=4101の時J暦は非閏年となり、G暦で4101年3月1日に破綻する。

・G暦ー>J暦 R<0
G暦の1月31日に対し対応するJ暦が閏年の場合R< ー29、またはJ暦の非閏年の場合R< ー28の時、処理が破綻する。R=ー29になるYは−3601(紀元前なので1足した)であるが、J暦は閏年である。
前年Y=−3602の時J暦は非閏年となり、G暦で−3602年1月31日に破綻する。

・J暦ー>G暦 R>0
J暦の1月31日に対し対応するG暦が閏年の場合R>29、またはG暦の非閏年の場合R>28の時、処理が破綻する。R=29になるYは4100であり、G暦は非閏年である。
よって、J暦で4100年1月31日に破綻する。

・J暦ー>G暦 R<0
J暦の3月1日に対し対応するG暦が閏年の場合R< ー29、またはG暦の非閏年の場合R< ー28の時、処理が破綻する。R=ー29になるYは−3601(紀元前なので1足した)であり、G暦は非閏年である。よって、J暦で−3601年3月1日に破綻する。
35サロス周期:02/01/03 23:03
あーさんよ。天保暦で通用すんだベか。教えてけろ。
36あやめ:02/01/04 11:24
>る さん
アルゴリズムの概要から適用の上限下限の理由まで、もう完璧な解説であやめの出番はございません。
>サロス周期さん
あーさんてあやめのこと?
質問の具体的な趣旨を明確にしていただかないと適切にお答えしかねます。
現行のいわゆる旧暦は幕末に制定された天保暦の準則により編成されており、その元になっているのは清の時憲です。
その編暦の基本となる原則は實氣定朔法ですが、これ以前の暦法は恒氣法や平朔法によったものが多く、実際に歴史上で行われた暦日は算出することはできず、それぞれの暦法で推算するか、「三正総覧」や「二十史朔閏表」などを検索するしかありません。
これら編暦上の諸概念については後述する予定です。
37:02/01/04 12:23
これ見てて思ったんですが、2月28日/29日による調整ではなく、
年末(12月31日/32日)による調整のほうが変換はずっと楽ですね。
いっそ3月1日を年初としてしまったほうがよかったのに>Gregoire
38あやめ:02/01/04 17:29
ローマ暦では元来はMartius即ち3月を年首としていたのを、カエサルが2ヶ月繰り上げてJanuariusを年首としてしまったため、それまでは年末におかれていて月間の日数が28日しかないFebruariusが年の途中に出現するようになってしまったのです。
これ一つとっても西洋の暦は不整合だらけです。
39あやめ:02/01/04 17:35
本日のおまけとして「ユリウス暦グレゴリオ暦史実七曜表[HISTRICAL CALENDAR]作成プログラム(HSCD)を数回に分割してカキコします

100 Rem ** 各月の名称と日数の読込 **
110 Dim R$(12),S(12),T(12):For MM=1 To 12:READ R$(MM),S(MM),T(MM):Next
120 DATA JAN.,31,31,FEB.,29,28,MAR.,31,31,APR.,30,30,MAI.,31,31,JUN.,30,30,JUL.,31,31,AUG.,30,31,SEP.,31,30,OCT.,30,31,NOV.,31,30,DEC.,30,31
160 Rem ** 初期画面と年月の入力 **
165 CONSOLE ,,0,1,0:Print Chr$(12)
170 Print Tab(15);"このプログラムは西暦紀元前45年に ":Print::Print Tab(15);"ユリウス暦が実施されて以後、歴史的に":Print
175 Print Tab(15);"実行された暦法に基づくカレンダーを":Print:Print Tab(15);"作成するためのものです":Print:Print
180 Print Tab(15);"カレンダーを作る年と月を打ち込んでください":Print:Print:Print Tab(15);"年と月の間にコンマ、紀元前にはマイナスを付けること":Print
185 Print Tab(15);" [ 1983,5 ] [ -120,10 ] のように":Print
190 INPUT YY,MM
195 JY=YY+4712:If YY<0 Then JY=YY+4713
200 Rem ** タイトルの表示 **
210 WIDTH 80,25:CONSOLE,,0,0,1:PRINT CHR$(12)
220 Print"§ HISTRICAL CALENDAR §":Print
230 If YY=-45 Then R$(7)="QUI."
235 If YY<8 Then R$(8)="SEX."
240 IF YY<0 THEN PRINT"B.C.";ABS(YY);"(J.P.";JY+1;")年";MM;"(";R$(MM);")月" ELSE PRINT "A.D.";YY;"(J.P.";JY+1;")年";MM;"(";R$(MM);")月"
245 Print
40あやめ:02/01/04 17:44
250 If JY>4667 Then GoTo 260
255 Print Tab(7);"B.C.46年のユリウス暦施行以前のカレンダーは作成されません":GoTo 590
260 If YY<1582 Then F$="J.C." Else If YY>1582 Then F$="G.C." Else If MM<10 Then F$="J.C." Else If MM>10 Then F$="G.C." Else F$="J.C. (1-4 J.C. |15-31 G.C.)"
270 DD=1:GOSUB *JDK
275 Print F$;" 1 日= J.D.";JD#;"日"
280 NV#=(JD#-5.5)/7#
290 Print Tab(7);" SU MO TU WE TH FR SA":Print
300 Rem ** 閏月の日数の修正 **
310 If JY>4719 Then GoTo 400
320 If JY>4706 Then GoTo 370
350 If Int(JY/3)<>JY/3 Then GoTo 370
360 S(2)=30
370 FD=S(MM)
380 GoTo 500
400 Rem ++ アウグスツス匡暦以後 ++
420 If JY < 6295 Then GoTo 450
430 If Int((JY+88)/400)=(JY+88)/400 Then GoTo 460
440 If Int((JY+88)/100)=(JY+88)/100 Then GoTo 470
450 If Int(JY/4)<>JY/4 Then GoTo 470
460 T(2)=29
470 FD=T(MM)
41あやめ:02/01/04 17:45
500 Rem ** 七曜表の作成 **
510 For DD=1 To FD
520 GOSUB *JDK
530 NW#=(JD#-5.5)/7#
540 NO#=(NW#-Int(NW#))*7#
550 NO%=Int(NO#+0.1)
560 LOCATE NO%*3+7,(Int(NW#)-Int(NV#))*2+9
570 Print USING;"###";DD;
580 Next DD
590 End
1000 *JDK:REM ** ユリウス日の計算 (JDK) **
1010 JY#=JY+(MM-1)/12+DD/365.25
1020 If MM>2 Then GoTo 1040
1030 MM=MM+12:JY=JY-1
1040 If JY#<4707 Then GoTo 1050 Else If JY#<4720 Then GoTo 1060 Else GoTo 1100
1050 JD#=Int(365.34*(JY-4665))+Int(30.54*(MM-2))+1703920.5:GoTo 1140
1060 JD#=365*(JY-4706)+Int(30.54*(MM-2))+1718898.5:GoTo 1140
1100 Rem ++ アウグスツス匡暦以後 ++
1110 If JY#<6294.77 Then GoTo 1120 Else If JY#>6294.79 Then GoTo 1130 Else GoTo 1160
1120 JD#=Int(365.25*JY)+Int(30.59*(MM-2))+28.5:GoTo 1140
1130 JD#=Int((JY+88)/400)-Int((JY+88)/100)+Int(365.25*JY)+Int(30.59*(MM-2))+66.5
1140 JD#=JD#+DD
1150 If MM>12 Then MM=MM-12:JY=JY+1
1160 Return
42あやめ:02/01/04 18:01
解説は省略しときますが変数のリストを掲記します
 変数
YY / 西暦の年付、紀元前の場合は「-」(マイナス)符号を付ける
MM / 西暦の月付
DD / 西暦の日付
JY / 各年のユリウス積年付
JY#/ 各日のユリウス積年付
JD#/ 各日のジュリウス積日付
R$(MM)/ 各月の名称
FD / 各月の日数、アウグツスツの匡暦前は S(MM)、後は T(MM)
NV#/ 各月初週のジュリウス積週数
NW#/ 各月各週のジュリウス積週数
NO#,NO%/ 各月各日の週日数
F$/ 暦法の名称
 略号
B.C./ 西暦紀元前
A.D./ 西暦紀元後
J.P./ ジュリウス積年
J.D./ ジュリウス積日
J.C./ ユリウス暦
G.C./ グレゴリオ暦
43世界@名無史さん:02/01/04 18:07
プ板の住人とか招いたら面白そうだけど。
44あやめ:02/01/04 19:09
これは>>33で述べた史実に対応した7曜カレンダーを出力するものです。
このプログラムでは8A.D.に8月の月名の変更と各月の日数の入れ替えが同時に実行されたものとして作成しました。
しかしこの点には幾つかの異説が存在します。
アウグストゥスが変則の閏を省くことにより置閏の乱れを匡正した年次については明確に説示したものに乏しい中で、
僅かに「三正綜覧」の12B.C.の鼇頭注に「是年羅馬帝澳古督覚誤置閏三日下令連十二年不置閏日」とあるのが依るべき唯一の記載です。
閏を省く期間については
正則変則いずれでも置閏すべき年である9B.C.の次年8B.C.よりとするもの
その次の変則置閏年である6B.C.よりとするもの
その次の正則置閏年である5B.C.よりとするものとがありますが、
これは説明の違いに過ぎないのでどちらでも結果は同じことです。
また8月をSextilisからAugustusと改称した年次については、
8B.C.説(内田正男著「こよみと天文今昔」青木信仰著「時と暦」)
4B.C.説(薮内清著「歴史はいつ始まったか」)
8A.D.説(能田忠亮著「暦学史論」)    
と分かれています。
各月の日数を入れ換えた年次についてもあまり明確な指示が見られませんが、概して8月の改称と同時に行なわれたもののような記述のニュアンスになっています。

事の成行きからするとそのように理解するのが妥当なところでしょう。
異説を唱えている先生方は斯界の重鎮ばかりで適従に惑ってしまいます。
45あやめ:02/01/04 19:29
道草はこのくらいにして来週からボチボチ太陽太陰暦の原論みたいなものを書くことにします。
そのあとでプログラムのコードを少しづつUPします。
あやめたん。
>>26のプログラムをJavaに移植してみたよ。
こんどは、これに>>32のプログラムも実装してみようかな。
http://javawebstart.s5.xrea.com/applet/calendar/index.html

// いいかげんに移植したから、あんまりきれいじゃないし、
// きちんと動くかどうか、ろくにチェックも、してないけど。
// ひまができたらアプレット版も、つくってみよっと♪
あしたにしようと、おもっていたけど、
けっきょく>>32のプログラムも実装してみたよ。
これというのも、あやめたんと>>34 るたんのおかげ。ちゅきちゅき。

// 適用範囲も、ひろげてみようなおもったけど、
// それは、めんどくさいから放棄。(^・・^=)ノ⌒◇
48あやめ:02/01/05 11:39
>がばろんたん
HPお持ちのこと初めて知りました
一応オキニサイトとして登録しときましたよ
でも独力でゲーム作っちゃうって凄いわね
JAVAって前から気にはなってるんだけど今更お勉強っつーのも鬱だしー^^;
49世界@名無史さん:02/01/06 22:37
素朴な疑問なのですが例えば英国史で
「1650年3月2日」とかいった場合、これはユリウス暦なんでしょうか?
50風向:02/01/06 22:51
英国史における暦法については、近藤和彦『民のモラル』1993年
山川出版社 58-63頁に詳しく載ってますよ。お尋ねの日にちに
ついてはユリウス暦でいいと思います。イギリスが改暦するのは、
ご存知だと思いますが1752年ですので。

注意しなければならないのは、イギリスの旧暦は1年の開始日が
1月1日ではなく3月25日だったので(例えば1651年は3月25日から
始まり翌年の3月24日まで続く)、この1650年3月2日は、今風に
言うと1651年3月2日のことだった可能性があります。
51世界@名無史さん:02/01/14 17:54
開発終了?
52世界@名無史さん:02/01/17 13:13
保全age
53あやめ:02/01/17 13:51
目下めちゃ多忙で書いてられないの(泣)
来週から書き継ぎます
いま少しお待ちください
54:02/01/20 22:18
ぷれっしゃあかけあげーーーーー
55すんまへん:02/01/21 16:56
♪プレッシャーに負けたー、い〜いえ(ハイトーン)[る]さんにゃ負ーけたー、このスレも追われたー
♪いっそカキコ止めるかー ってわけにもいかないわね。
でも素直に引き下がらないあやめ、暫くは太陽太陰暦の編成原理について書くことにします。
詰まんないかもしれないけどプログラム解析の前提となるものだから、我慢して付き合って。ネッ

どんな原始社会にあっても時間のメルクマールとなるのは太陽の運行でしょう。昼夜の交代での回帰と
四季の変遷での循環、運動の安定性と周期性から時間単位として「日」と「年」が意識されることと
なったに相違ありません。
人間の体感できる時間観念としては確実な具体的指標を認識しうるのは、長期で「年」短期で「日」という
のが基本的単位で、「世紀」とか「時刻」は歴史や生活についてある程度の意識と要求が累積してから、
観念操作によって設定されたものと考えられます。
しかし1年というスパンは体感によって把握するには余りにも長い。「日」と「年」との間に何等か適宜の
時間単位が要望されることになったのでしょう。そこで毎日の生活の中で人々が気付いたのはお月様の様子です。
どうやら痩せたり肥えたりしてるように見える、しかもそれはおよそ決まったサイクルでの現象らしい。しかも
潮の満干や女性の生理ともシンクロしてるようにも思える。「月」という時間単位も必然的に採用されるように
なったのでしょう。

ここでちょっとお断りしときたいのは天体としてのお月様を「月」と表記すると、時間単位としての「月」と
紛らわしいので、以下では天体の月のことは「太陰」と書くことにします。これでオテント様とパラレルな
表現となります。
この際ついでにもう一つ断っておきたいのは「太陽」というのは「視太陽」を指すという点です。世間では
地球の方が太陽の周りを回ってると言ってるようですが、お天道さまの傍まで行って地球がぐるぐる回って
るのを確認した人はいません。皆様が視認して確かなように太陽は山の端か水平線から昇り、空を少しづつ
移動して山の端か水平線に隠れるという振舞いを反覆しています。暦を語るには見かけの太陽の運行を問題
にしておけば十分です。「それでも地球は回っている」と言いたい人には言わせておきましょう。
並行する2直線は交叉しないとユークリッドが言ったのに、宇宙は閉じてるから交わることもあるんだという
話を持ち出したり、ニュートンがリンゴの木の下で考えてくれた力学体系に満足せず、アインシュタインが
レールの上で思いついた理論を振り回したりして、文科系人間を煙に巻くのは止めてもらいましょう。世界は
ユークリッドやニュートンで十分に有効な説明が可能です。太陽の方が地球をまわってるんです。これが定説です。
56あやめ:02/01/21 16:59
すんまへんじゃなくあやめのレスです
57世界@名無史さん:02/01/21 17:00
現在の太陰太陽暦(旧暦)って誰が定めているの?
58あやめ:02/01/21 20:56
太陰太陽暦の頒布権は明治三十三年から神宮司廳に移管され今日に至っています。
その根拠となるべき天体運動の数値は海上保安庁水路部が編纂する「天体位置表」を
参照しているものと思います。編暦の方法は「天保暦」の準則に拠ります。その要旨は
これから何回かに分け説明する予定です。
なお毎年2月1日に官報上に「年暦要項」として翌年の暦の主要部分が掲載されます。
これが現行暦の法的有権データですが、その資料は東京大学東京天文台が提供しています。
春分・秋分は「国民の祝日に関する法律」とかかわってきますから、計算上は早くからその
日が分っていても、前年2月1日までは確定しないのです。

「すんまへん」は先日あそびに来たこがあやめのPCいじって、どこかのスレに何か
レス書き込んだらしく、そのときのハンドルがクッキーに残っちゃてたらしいです。
うっかりできないわ (A~~;
59あやめ:02/01/21 20:58
さて太陰の運行が旧暦における「月」単位の基準になっていることは現代人にとっても常識でしょう。
しかし太陽の運行に即して「月」という時間単位を設定するという試みがあることも注意してください。
そのアイディアを窺がうべき経典は「禮記」の「月令」です。「月令」は「ぐゎちりゃう」と読み習わされて
います。いわゆる博士読みですが現在は「げつれい」と読んで差し支えないでしょう。「月令」の作者は周公
とも呂不韋とも説かれています。後説は「呂氏春秋」の「十二紀」に「月令」の思想が反映されているからで、
恐らく周代に成立したものが秦法に採用されたものであろうと考察されています。
その内容は四季それぞれを孟・仲・季に3分し太陽の運行による12個の「月」体系を組織したもので、各月に
ついて日躔(太陽の所在する星宿)・昏旦の中星・配当さるべき帝・神・虫・音・律・数・味・息・祀などを掲げ、更には
各月に実施さるべき行事・政令を記しています。
京大理学部の能田忠亮博士は「禮記月令天文考」(恒星社刊「東洋天文學史論叢」所収)において、これらの記事を
検討して「月」体系が当時常用の太陰暦月ではなく、その基準となるべき太陽月であること、日躔は黄経で
なく赤経によったものと見るべきこと、記載された二十四気が成立途上にあるものであること、日躔の根拠と
なるべき座標系である二十八宿の弧星と建星の問題や歳差現象による二十八宿分度の変化を考察し、各星宿の
距星の現代の天体との同定を行ない、この結果を以て文献の記載に照合して、各月の日躔が節気つまり月初の
天象に適合することを究明し、このことから記事に対応する観測年代を620B.C.から200年間と断定しました。
これらの見解は「月令」研究上の画期的業績と評価されています。
「月令」記事のうち天象を伴うもののみ書き出しておきます。
孟春の月は日は營室に在り、昏には參に中し、旦には尾に中す
仲春の月は日は奎に在り、昏には弧に中し、旦には建星に中す
季春の月は日は胃に在り、昏には七星に中し、旦には牽牛に中す
孟夏の月は日は畢に在り、昏には翼に中し、旦にはブ(務の力を女に)女に中す
仲夏の月は日は東井に在り、昏には亢に中し、旦には危に中す
季夏の月は日は柳に在り、昏には火に中し、旦には奎に中す
孟秋の月は日は翼に在り、昏には建星に中し、旦には畢に中す
仲秋の月は日は角に在り、昏には牽牛に中し、旦には觜ケイ(角偏に山の下に雋)に中す
季秋の月は日は房に在り、昏には虚に中し、旦には柳に中す
孟冬の月は日は尾に在り、昏には危に中し、旦には七星に中す
仲冬の月は日は斗に在り、昏には東壁に中し、旦には軫に中す
季冬の月は日はブ女に在り、昏には婁に中し、旦にはテイ(氏の下に一、この字フォントないなんて?)に中す
60あやめ:02/01/21 21:04
続きは木曜以降に書きます
61世界@名無史さん:02/01/21 21:11
僕は今アメリカの大学でプログラミング専攻してるけど
1さんが言っているのと全く同じプログラムを
去年、クラスのプロジェクトでインドネシア人と作ったよ
もしよかったらUPロードしてもいいんだけど
余計なお世話かな?
62あやめ:02/01/24 19:25
12個の太陽月の骨格を形成しているのは皆様よく御存じの「二十四氣」という観念です。
一応そのリストを掲記しておきます。
[孟春] 立春315|雨水330 [仲春] 啓蟄345|春分 0 [季春] 清明 15|穀雨 30
[孟夏] 立夏 45|小満 60 [仲夏] 芒種 75|夏至 90 [季夏] 小暑105|大暑120
[孟秋] 立秋135|處暑150 [仲秋] 白露165|秋分180 [季秋] 寒露195|霜降210
[孟冬] 立冬225|小雪240 [仲冬] 大雪255|冬至270 [季冬] 小寒285|大寒300
各太陽月の左に在る当月始点(=前月終点)を「節氣」と名づけ当月中点を「中氣」と名づけます。
両氣のうち「中氣」の方がより重要とされます。なぜなら後述のように「太陰月」の月名や閏月の位置を決定
する基準となる指標であるからです。わけても中核となるのが「二至二分」つまり冬至・夏至・春分・秋分です。
この四中氣は太陽の運行軌道上の意味を持つ位置点であるからです。御承知のように黄道(太陽の地球の周囲を
回る軌道)は赤道(地球の自転軌道で、これを天球上に投射したものが天の赤道)に対し、約23度半ほど傾斜し
ており従って両道が交叉する点が2回ありえます。太陽が天球上を南から北へ横断した瞬間の太陽の黄経上の
位置を春分点と呼び、北から南へ横断した瞬間の太陽の黄経上の位置を秋分点と呼び、また北から南へ降行し
最低赤緯に到達した瞬間を冬至点と呼び、南から北へ昇行し最高赤緯に到達した瞬間を夏至点と呼びます。
なお「節氣」については四季それぞれの始点である「四立」が重視されています。
「そんなこと中学で教わったよ、厨房扱いすんな」って怒らないでね。この後の説明の都合上よく承知した上で
敢えて書いてるんだから。うざったかったら読み飛ばしてください。
「月令」には仲春の月と仲秋の月について「是月也日夜分」と記述し、仲夏の月については「是月也日長至」と
仲冬の月については「是月也日短至」と記述しています。「日夜分」とは日夜の各時間が平分であるということ
「至」とは極限に達するということです。これ以外の中氣は特別な意味はなく黄経上を等分して各点を機械的に
設定したものです。上記のリストの数字は各氣点の黄経度数値で春分点から15度づつ取って決めたものという
ことが判ります。
ところでここに問題なのは太陽の軌道周回は等速運動ではないということです。これまた御存じのケプラー運動
です。太陽が地球を回る(逆だという意見はこの際シカトしときます)軌道は偏った焦点を持つ楕円を描いている
ので、その速度はケプラーの第2法則(面積速度一定則)によって近地点では最大で遠地点では最小です。従って
同一経角度間の移動であっても冬場は短かい時間で済みますが、夏場は長い時間が掛かることになります。四季
それぞれの日数は凡そ春92日21時・夏93日14時・秋89日18時・冬89日1時となります。
太陽が春分点を通過した瞬間から次に春分点を通過する瞬間までの日数は365.24219879日(365日5時48分45秒253)
とされています。この1ヶ年間の二十四氣の決定の方法には時間的等分法と経度的等分法があります。
続きます
63あやめ
>>62
UPおねがいします
アルゴリズム知りたいです