Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2018-12-11

「修正ユリウス日取得」と「年ノ干支取得」と「日ノ干支取得」

| 04:27

 マイナビ連載39目は、「2019年を有意義にする年計画表作成アプリを作ろう」でした。

 https://news.mynavi.jp/article/nadeshiko-39/

 年計画どころか、冬休みの計画でさえ、実行出来たことは無かったですけどね~w

 してや、一年が始まったかと思っていたら、なんかもう年賀状書かなきゃなんですけど?! みたいなヽ(;´Д`)ノ

 と、いうわけで計画なんか立てないけど、折角カレンダーなので、ワタシは十干十二支と二十四節気を追加してみたいと思う。


 「二十四節気取得」は、以前関数を作りました。

 https://nadesiko.g.hatena.ne.jp/snowdrops89/20180427/1524800687


 十干十二支は、なでしこ1には「年ノ干支取得」と「日ノ干支取得」とゆう命令があったんだけど、なでしこ3にはまだ無いんだよね。

 年のはまあ、簡単なんですよ。西暦を十干の10と、十二支の12でそれぞれ割った余りから算出できます。

 しかし、日は……?

 まあ、60日おきにぐるぐるってるだけだから、なんかかんか出来ると思うんだけど、ウィキペディアさまによるとどうやら、ユリウス通日とやらから算出するラシイ。

 https://ja.wikipedia.org/wiki/%E5%B9%B2%E6%94%AF#%E6%97%A5%E3%81%AE%E5%B9%B2%E6%94%AF

 な、なんて???(@_@)


 なでしこ1では、「修正ユリウス日取得」とゆう命令もあったのですが、これもなでしこ3にはまだありません。

 がっ、ウィキペディアさまはなんでも教えてくれます。

 https://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E9%80%9A%E6%97%A5#%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%82%AA%E6%9A%A6%E3%81%8B%E3%82%89%E4%BF%AE%E6%AD%A3%E3%83%A6%E3%83%AA%E3%82%A6%E3%82%B9%E6%97%A5%E3%81%B8%E3%81%AE%E6%8F%9B%E7%AE%97

 ぐっ、具合悪っ(´д`;


 ・・・とゆうわけで作ってみた、「修正ユリウス日取得」と「年ノ干支取得」と「日ノ干支取得

●(日付を|日付の|日付で)修正ユリウス日取得
  日付を「/」で区切る
  y=それ[0]。m=それ[1]。d=それ[2]。
  もし、(m=1)または(m=2)ならば、
    y=y-1。m=m+12。
  ここまで。
  (INT(365.25*y))+INT(y/400)-INT(y/100)+INT(30.59*(m-2))+d-678912で戻るここまで。

●(日付を|日付の|日付で)日ノ干支取得
  十干=「甲乙丙丁戊己庚辛壬癸」を文字列分解。
  十二支=「寅卯辰巳午未申酉戌亥子丑」を文字列分解。
  日付の修正ユリウス日取得。
  十干No=それ%10。
  十二支No=それ%12。
  もし、十干No<0ならば、十干No=十干No+10。
  もし、十二支No<0ならば、十二支No=十二支No+12。
  「{十干[十干No]}{十二支[十二支No]}」で戻る
ここまで。

●(日付を|日付の|日付で)年ノ干支取得
  十干=「庚辛壬癸甲乙丙丁戊己」を文字列分解。
  十二支=「申酉戌亥子丑寅卯辰巳午未」を文字列分解。
  日付を「/」で区切る
  西暦年=それ[0]
  十干No=西暦年%10。
  十二支No=西暦年%12。
  「{十干[十干No]}{十二支[十二支No]}」で戻る
ここまで。

 まあ、式は丸写しだから、コード自体は難しくない

 タブンあってると思うんだけど・・・

 なでしこ1同様、紀元前には未対応です。(タブ修正ユリウス日取得の公式自体が紀元前には対応してないみたい?)

 あと、本来は、1873/1/1(新暦導入)以前の年ノ干支は、正確ではありません。旧暦の正月から大晦日になるので、年末年始がちょっと違ってしまうんだよね。まあ、なでしこ1もそうなってるので、互換とゆうことでw

 旧暦変換なんて、ワタシの知恵ではもう完全にムリです><


 ででで、折角だからカレンダーにする。

# 365日分のカレンダーに十干十二支と二十四節気を表示
対象日=「2019/01/01」
対象秒=対象日をUNIXTIME変換。
365
 F曜日対象日の曜日。
 F日付=対象日を「/」で区切る。
 十干十二支=対象日の日ノ干支取得。
 二十四節気=対象日の二十四節気取得。
 「{F日付[1]}月{F日付[2]}日({F曜日}){タブ}{十干十二支}{タブ}{二十四節気}」を表示。
 対象秒=対象秒+(60 * 60 * 24)
 対象日=対象秒を日時変換して「 」まで切り取るここまで。

●(日付を|日付の|日付で)修正ユリウス日取得
  日付を「/」で区切る
  y=それ[0]。m=それ[1]。d=それ[2]。
  もし、(m=1)または(m=2)ならば、
    y=y-1。m=m+12。
  ここまで。
  (INT(365.25*y))+INT(y/400)-INT(y/100)+INT(30.59*(m-2))+d-678912で戻るここまで。

●(日付を|日付の|日付で)日ノ干支取得
  十干=「甲乙丙丁戊己庚辛壬癸」を文字列分解。
  十二支=「寅卯辰巳午未申酉戌亥子丑」を文字列分解。
  日付の修正ユリウス日取得。
  十干No=それ%10。
  十二支No=それ%12。
  もし、十干No<0ならば、十干No=十干No+10。
  もし、十二支No<0ならば、十二支No=十二支No+12。
  「{十干[十干No]}{十二支[十二支No]}」で戻る
ここまで。

●(日付を|日付の|日付で)二十四節気取得
  節気=["小寒","大寒","立春","雨水","啓蟄","春分","清明","穀雨","立夏","小満","芒種","夏至","小暑","大暑","立秋","処暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
  データ=[{"D":6.3811,"A":0.242778},{"D":21.1046,"A":0.242765},{"D":4.8693,"A":0.242713},{"D":19.7062,"A":0.242627},{"D":6.3968,"A":0.242512},{"D":21.4471,"A":0.242377},{"D":5.6280,"A":0.242231},{"D":20.9375,"A":0.242083},{"D":6.3771,"A":0.241945},{"D":21.9300,"A":0.241825},{"D":6.5733,"A":0.241731},{"D":22.2747,"A":0.241669},{"D":8.0091,"A":0.241642},{"D":23.7317,"A":0.241654},{"D":8.4102,"A":0.241703},{"D":24.0125,"A":0.241786},{"D":8.5186,"A":0.241898},{"D":23.8896,"A":0.242032},{"D":9.1414,"A":0.242179},{"D":24.2487,"A":0.242328},{"D":8.2396,"A":0.242469},{"D":23.1189,"A":0.242592},{"D":7.9152,"A":0.242689},{"D":22.6587,"A":0.242752}]

  日付を「/」で区切る。
  年=それ[0]
  月=それ[1]
  日=それ[2]を整数変換。
  日付=「{年}/{月}/{日}」
  もし、月<3ならば、Y=年-1。
  違えばY=年。
  もし、日>15ならば、数=月*2-1。
  違えば、数=月*2-2
  日=データ[数]["D"]とデータ[数]["A"]でYの節気計算。
  もし、「{年}/{月}/{日}」=日付ならば、節気[数]で戻る。
  違えば戻るここまで。

●(DとAでYの)節気計算
  INT(D+(A*(Y-1900))-INT((Y-1900)/4))
ここまで。

 もらったばかりのカレンダーを見た感じ、合ってると思う~☆

 小寒までしか見てないけどさ;

 簡易エディタでお試し出来ます。

 https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20181211