▶ 実 行
▶ 実行
クリア
西暦→旧暦変換 / 西暦→和暦変換
by 雪乃☆雫
旧暦変換プラグイン=プラグイン名。 #元号取得 !「https://n3s.nadesi.com/plain/556.nako3」を取り込む。 #テスト もし、旧暦変換プラグイン=「メイン」ならば、 //西暦→旧暦は、645/2/2から2099/12/31までの西暦の日付を旧暦に変換。(2021/6/4→令和3年4月24日) 「西暦→旧暦変換」のボタン作成して、西暦旧暦変換ボタンに代入。 西暦旧暦変換ボタンをクリックした時には、 「【西暦→旧暦】{改行}yyyy/mm/ddで西暦の日付を入力してください{改行}有効範囲:{旧暦表始め} ~ {旧暦表終り}」と尋ねる。 西暦はそれ。 西暦を西暦旧暦変換して、「【旧暦変換】{改行}{西暦}:{それ}」を言う。 ここまで。 //西暦→和暦は、1873/1/1以降の場合は西暦年を元号年に変換するだけ。(2021/6/4→令和3年6月4日) 「西暦→和暦変換」のボタン作成して、西暦和暦変換ボタンに代入。 西暦和暦変換ボタンをクリックした時には、 「【西暦→和暦】{改行}yyyy/mm/ddで西暦の日付を入力してください{改行}有効範囲:{旧暦表始め} ~ 」と尋ねる。 西暦はそれ。 西暦を西暦和暦変換して、「【和暦変換】{改行}{西暦}:{それ}」を言う。 ここまで。 ここまで。 //大化元年1月1日645/2/2から2099/12/31までの西暦の日付を旧暦に変換。 ●(西暦を)西暦旧暦変換 旧暦は西暦から旧暦取得。 旧暦を「/」で区切る。年=それ[0]。月=それ[1]。日=それ[2]。 年を「・」で区切る。年=それ。 もし、(年の配列要素数)>1ならば、 「{年[0]}年/{年[1]}年{月}月{日}日」で戻る。 違えば、 「{年}年{月}月{日}日」で戻る。 ここまで。 ここまで。 //大化元年1月1日(645/2/2)から明治5年12月2日(1872/12/31)までの西暦の日付を旧暦に変換。 //明治六年1月1日(1873/1/1)以降の場合は、現行のグレゴリオ暦に西暦年を元号年に変換っていうかなでしこ3の和暦変換w ●(西暦を)西暦和暦変換 もし、(太陽暦採用と西暦の日数差)≧0ならば、 西暦を和暦変換して、それを「/」で区切る。 年=それ[0]。月=それ[1]。日=それ[2]。 「{年}年{月を整数変換}月{日を整数変換}日」で戻る。 違えば、 西暦を西暦旧暦変換して戻る。 ここまで。 ここまで。 #旧暦取得 //大化元年1月1日(645/2/2)から2099/12/31までの西暦から旧暦を取得。 //文献データを元に暦日を取得するもので、天文学的な計算によって算出するなでしこv1の旧暦変換とは結果が異なる場合があります(特に閏月の設定) //また西暦は、1582/10/04までユリウス暦、1582/10/15からグレゴリオ暦としています(v1では、1582/10/15以前も遡りでグレゴリオ暦を適用されているので結果がずれます) ●(西暦から|西暦の)旧暦取得 #西暦をチェックして修正ユリウス日に変換。 西暦は西暦を英数半角変換して、「/」を「/」に置換。 西暦を『\d{3,4}/\d{1,2}/\d{1,2}』で正規表現マッチ。 もし、それがNULLならば、「【日付が不正です】」で戻る。 もし、((旧暦表始めと西暦の日数差)<0)または((旧暦表終わりと西暦の日数差)>0)ならば、「【日付が有効範囲外です】」で戻る。 対象日=西暦の修正ユリウス日取得。 年=西暦から「旧暦」で元号取得。 もし、(年の配列要素数)>1ならば、年=年を「・」で配列結合。//半角中点 #元号取得時に得た旧暦Noから対象データを設定 対象データ=旧暦表[旧暦No]。 元日=対象データ["元日"]の修正ユリウス日取得。 翌年=旧暦表[対象キー+1]["元日"]の修正ユリウス日取得。 閏=対象データ["閏"]。月大小=対象データ["大小"]。 日数=対象日-元日。 #元日からの日数から各月の日数を引いていき、何月何日か求める。 月大小の要素数回 #各月の日数は、大の月1、小の月0でテーブルにしているので、それを29に足しているだけ。 大小=月大小[回数-1]。 もし、(29+大小)≦日数ならば、 日数=日数-(29+大小)。 違えば、 日=日数+1。 #閏月があれば月数を調整 もし、回数>閏ならば、 月=回数-1。 もし、月=閏ならば、 月=閏+0.5。 ここまで。 違えば、 月=回数。 ここまで。 もし、(月>閏)かつ(月<閏+1)ならば、月=「閏{閏}」 「{年}/{月}/{日}」で戻る。 ここまで。 ここまで。 「不明」で戻る。 ここまで。 /* 【和暦データ】https://n3s.nadesi.com/image.php?f=22.json 文献の引き写しで主に手入力で作成。 「元号一覧」 ・和暦は和暦での改元日。西暦はそれを西暦に直したもの。 ・開始、終了は元号未制定時期と南北朝の元号並立期間に関連した例外処理用。 ・元号未制定期間は天皇の年期を代用。 ・西暦は1582/10/15以降はグレゴリオ暦、それ以前はユリウス暦。 「旧暦表」 ・大化元年から明治5年までの元日,閏,月の大小。 ・元日は旧暦1/1の西暦日付。大の月は30日、小の月は29日。 【旧暦表1873-2099】https://n3s.nadesi.com/image.php?f=24.json なでしこv1で作成。 ・明治6年から令和81年までの元日,閏,月の大小。 ・なでしこv1の旧暦変換には問題がありましたが、朔日と閏月に付いては信用出来そう。 ・2033年問題については暦文協の見解に基づき閏11月案に修正。 ※参考文献 『日本暦日原典』 内田正男 雄山閣出版 463900091X ※国立天文台 暦計算室 http://eco.mtk.nao.ac.jp/koyomi/ ※こよみのページ http://koyomi8.com/ ※暦文協 https://www.rekibunkyo.or.jp/top.html */