▶ 実 行
▶ 実行
クリア
和暦→西暦変換
by 雪乃☆雫
西暦変換プラグイン=プラグイン名。 !「https://n3s.nadesi.com/plain/561.nako3」を取り込む。#西暦範囲取得 //和暦を西暦に変換。明治六年以降は現行のグレゴリオ暦により、元号年を西暦年に変換しているだけ。 //それ以前の和暦は、旧暦の日付として、西暦の日付に変換。天皇の年紀には非対応。 //西暦は、1582/10/04までユリウス暦、1582/10/15からグレゴリオ暦。 ●(和暦を)和暦西暦変換 #和暦を年月日に分解 和暦は、和暦を英数半角変換して、「/」で区切る。 もし、(和暦の配列要素数)≦1ならば、和暦は和暦を「[年月日]」で正規表現区切る。 元号年=和暦[0]。月=和暦[1]。日=和暦[2]。 #日付のチェック(大の月か小の月かはあとでチェックする) もし、(月>12)または(日>31)ならば、「【日付が不正です】」で戻る。 #閏月かどうか(実際のチェックはあとでする) もし、(月の1だけ文字左部分)=「閏」ならば、 月=月の「閏」を空に置換。閏=はい。 ここまで。 #漢字表記を算用数字に(元年、正月、朔日の表記に対応) もし、月=「正」ならば、月=「1」。 もし、(月を数列か判定)=いいえならば、月=月を算用数字。 もし、閏=はいならば、月=月+0.5。 もし、日=「朔」ならば、日=「1」。 もし、(日を数列か判定)=いいえならば、日=日を算用数字。 もし、(元号年の1だけ文字右部分)=「元」ならば、 元号年=元号年の(元号年の文字数)から1だけ文字削除。 元号年=元号年に「1」を追加。 ここまで。 #元号年からその年の正月を取得する。 元号年から西暦範囲取得。元日はそれ[0]。 もし、太陽暦採用≦(元日の修正ユリウス日取得)ならば、 #明治六年(グレゴリオ暦採用)以降の場合。 元日を「/」で区切る。年=それ[0]。「{年}/{月}/{日}」で戻る。 違えば、 #旧暦Noから対象データを設定 旧暦Noとは変数=元日の旧暦番号検索。 対象データ=旧暦表[旧暦No]。 閏月=対象データ["閏"]。月大小=対象データ["大小"]。 元日は元日の修正ユリウス日取得。 #閏月のチェック もし、(閏=はい)かつ(閏月≠(月を切り捨て))ならば、「【{元号年}年に閏{月を切り捨て}月はありません】」で戻る。 もし、閏月<月ならば、月=月+1を切捨て。 #日付チェック もし、日>30ならば、「【日付が不正です】」で戻る。#大の月30日 もし、(日≧30)かつ(月大小[月-1]=0)ならば、「【{元号年}年{月-1}月は小の月です】」で戻る。 #ループで月の日数を足していき、最後に日にちを足して、元旦の日付からの日数を数える。 日数は0。 (月-1)回 日数=日数+29+月大小[回数-1]。 ここまで。 日数=日数+日-1。日付=元日+日数。 もし、日付≧グレゴリオ暦開始ならば、日付からグレゴリオ暦取得して戻る。 違えば、日付からユリウス暦取得して戻る。 ここまで。 ここまで。 ##テスト もし、西暦変換プラグイン=「メイン」ならば、 「和暦→西暦変換」のボタン作成して、和暦西暦変換ボタンに代入。 和暦西暦変換ボタンをクリックした時には、 「【和暦→西暦】{改行}和暦を入力してください。漢数字、全角数字も可。{改行}(例:元禄十五年十二月十四日、R3/6/1など)」と尋ねる。 和暦はそれ。和暦を和暦西暦変換。 「{和暦}:{それ}」を言う。 /* 「天正10年09月18日」を和暦西暦変換して表示。 //1582/10/04 //ユリウス暦 「天正10年09月19日」を和暦西暦変換して表示。 //1582/10/15 //グレゴリオ暦 「天正十一年正月四日」を和暦西暦変換して表示。//1583/01/27 「天正11年閏01月04日」を和暦西暦変換して表示。//1583/02/26 //閏月 「天正11/2/4」を和暦西暦変換して表示。 //1583/03/27 */ ここまで。 ここまで。