干支(えと) の計算 SECOND 2008/01/12 02:18:50 (修正1回) ├!干支(えと)の計算4※こちらの「空打ち」は... SECOND 2008/01/12 15:43:11 (修正4回) ├テキストWindowを起動時に、位置と、大きさ... SECOND 2008/01/12 16:18:03 │└WINHANDLE関数を使うとWin32APIに渡すための... 白石 和夫 2008/01/12 18:31:28 │ └すみません、トップページも見るようにしま... SECOND 2008/01/12 20:15:11 ├!広範囲B.C.4713(-4712)~2400~のユリウス日... SECOND 2008/01/13 14:35:13 (修正3回) │└!続く SECOND 2008/01/13 14:36:31 (修正2回) │ └ユリウス日とは、何か。 SECOND 2008/01/14 06:45:15 └グレゴリオ暦とユリウス暦の両方を表示でき... 荒田浩二 2008/01/20 11:40:55
Re: 干支(えと) の計算 |
返事を書く ノートメニュー |
荒田浩二 <knrztrhoel> 2008/01/20 11:40:55 | |
グレゴリオ暦とユリウス暦の両方を表示できるカレンダーです。
SECONDさんも苦労されていますが、ユリウス日から元の年月日を取り出すのが大変なんですよね。 ユリウス暦の制定は紀元前45年ですが当初は3年に1度の閏年だったそうで、それを取り入れています。参考にしたのは、2006年2月ごろのWikipediaの記事です。 ぜひ、1582年10月の日付を入力してみてください。変換期のカレンダーを表示できます。 ところで、SECONDさんのプログラムでは西暦1年の前年が西暦0年となりませんか? REM ** グレゴリオ暦/ユリウス暦 カレンダー ** !閏年 -44年,-41,-38,-35,-32,-29,-26,-23,-20,-17,-14,-11,-8,+8,+12,+16年,,, DECLARE FUNCTION y_m_d,gMJD,jMJD,weekcode OPTION BASE 0 DIM w$(7-1),md(1 TO 12),weekcirc(7*4-1),juweekcirc(7*3-1) DIM 十干$(10-1),十干かな$(10-1),十二支$(12-1),十二支かな$(12-1) SET ECHO "OFF" LINE INPUT PROMPT "西暦年/月/日 (半角入力)":ymd0$ ! 区切り文字は何でも可(/-,.文字や空白も可) CALL data_check ! 入力データチェック WHEN EXCEPTION IN ! 年,月,日の取得 LET y=y_m_d(1) ! 年 LET m=y_m_d(fi+1) ! 月 LET d=y_m_d(fi+1) ! 日 LET sy$=STR$(y) LET sm$=STR$(m) LET sd$=STR$(d) USE CALL error(1) END WHEN MAT READ w$,md,weekcirc,juweekcirc DATA 日,月,火,水,木,金,土 DATA 31,28,31,30,31,30,31,31,30,31,30,31 DATA 0,1,2,3,5,6,0,1,3,4,5,6,1,2,3,4,6,0,1,2,4,5,6,0,2,3,4,5 ! 1月1日の曜日 DATA 5,6,1,2,3,5,6,0,2,3,4,6,0,1,3,4,5,0,1,2,4 ! 初期ユリウス暦 CALL error_check ! エラーチェック LET leap=0 ! うるう年 off LET tjleap=0 ! 通年ユリウス暦うるう年 off IF y>0 AND MOD(y,4)=0 THEN LET tjleap=1 LET jdy=y LET jdm=m LET jdd=d LET jdleap=0 ! ユリウス通日での閏年 off IF m=1 OR m=2 THEN ! 1月2月は前年の13月14月として計算 LET jdy=y-1 LET jdm=m+12 END IF ! ユリウス通日(AJD),Lilian日(LD),修正ユリウス日(MJD) DEF AJD=MJD+2400000.5 ! -4713/1/1=-0.5 (-4713/1/1/12:00=0) ユリウス通日 DEF LD=AJD-2299159.5 ! LD=MJD+100841 1582/10/15=1 Lilian日 IF y>1582 OR (y=1582 AND (m>10 OR (m=10 AND d>=15))) THEN LET gg=1 ! 1582/10/15以降 LET r$="(グレゴリオ暦・" CALL greg ! グレゴリオ暦の曜日閏年計算 LET jdleap=leap IF MOD(y,4)=0 THEN LET tjleap=1 LET MJD=gMJD(jdy,jdm,jdd) ! 修正ユリウス日 ELSE LET gg=0 IF y=1582 AND m=10 AND (d>4 AND d<15) THEN PRINT "ユリウス暦・グレゴリオ暦 期間外 !!" LET jg=-1 END IF LET r$="(ユリウス暦・" LET MJD=jMJD(jdy,jdm,jdd) ! 修正ユリウス日 SELECT CASE y CASE IS >=8 ! 改良ユリウス暦 LET y1w=weekcirc(MOD(y+15,7*4)) IF MOD(y,4)=0 THEN LET leap=1 LET jdleap=leap CASE 1 TO 7 ! AD.移行期間 LET y1w=MOD(y+6,7) IF y=4 THEN LET jdleap=1 CASE -7 TO -1 ! BC.移行期間 LET y1w=y+7 IF MOD(y,4)=3 THEN LET jdleap=1 !<続く> |
├!<続き> 荒田浩二 2008/01/20 11:44:36 │└![続き] 荒田浩二 2008/01/20 11:52:14 │ └!(続き) 荒田浩二 2008/01/20 11:56:51 │ └!"続き" 荒田浩二 2008/01/20 11:58:05 └紀元0年については、理科年表の「ユリウス... SECOND 2008/01/20 15:50:59 (修正6回) └続く SECOND 2008/01/21 16:02:27 └天文関係では紀元0年を設定しているとは不明... 荒田浩二 2008/01/23 20:25:33 └私も、初めてお聞きする事で、できれば・・... SECOND 2008/01/24 05:50:01 (修正1回)