「ユリウス日」からわかること

伺かアドベントカレンダー2010に寄せる記事です。





以前、里々で西暦の日付からユリウス日を算出する方法について考えてみたことがありました。
こちらをまずはご一読ください



さて、今回はこれを踏まえまして、ではこの「ユリウス日」を使って実際にどんなことができるかというのをあれこれ考えてみました。以下、全体的に里々についてのお話になります。

使用例1: お久しぶり! ……何日ぶり?

さて、ではこの値がゴーストにとってどう役立つかというと、まずまっさきに考えられる利用法としては「日付間の日数の算出」があります。
例えばゴーストが起動したときに、前回終了時から何日経っているのかを正しく求めたい、というようなことがあろうかと思いますが、これを何月何日という普通の日付から計算しようとすると地味に厄介で、

  • 前回終了時から年をまたいでいないか
  • 月をまたいでいないか
  • またいでいる場合、それは大の月か小の月かはたまた2月か
  • 2月の場合、その年は閏年かどうか
  • そもそも閏年の置き方の規則というのはうんぬんかんぬん


……というようなことをひととおり考慮しなくてはなりません。

ところがユリウス日ならば単に引き算をするだけでたちどころに正確な経過日数が出てまいります。
すなわち、前掲の記事のユリウス日算出スクリプトを記したうえでゴーストの終了時に

$終了ユリウス日【タブ】(call,ユリウス日,(現在年),(現在月),(現在日))

のようにしておけば、次に起動したときに

:こんにちは! (calc,(call,ユリウス日,(現在年),(現在月),(現在日))-(終了ユリウス日))日ぶりですね!

のようなことができるわけです。

ひとつ注意点を挙げれば、ユリウス日の値はそれ自体けっこう大きな数になりますので、たとえば経過時間を日単位ではなく秒単位で求めたいからといって安易にユリウス日に86400を掛けたりするととんでもない数字になってオーヴァーフローいたします。その場合は適宜2450000くらいをあらかじめ引くなりしておきましょう*1

*1:ちなみにユリウス日から2400000.5を引いて扱いやすくしたものは修正ユリウス日と呼ばれています

使用例2: あの日は何曜日?

里々で今日の曜日を取得したければ(現在曜日)とすればいいだけですが、場合によっては今日ではなくある特定の日付の曜日を求めたいようなときがあるかもしれません。そんなときもユリウス日が有効です。

曜日というのは7日の単純なサイクルで廻っておりますので、ユリウス日を7で割った余りは各曜日に対応します。7で割り切れる日が月曜日になります。
これを踏まえて、

ドラえもんは(nswitch,(calc,(call,ユリウス日,2112,9,3)%7+1),月,火,水,木,金,土,日)曜日生まれなんですよ。

みたいなかたちで利用できます。


ただ、単に近年の日付の曜日を求めたいだけならツェラーの公式なんてものがあったりするので、わざわざユリウス日から計算するのは若干、鶏を割くに牛刀を用いている感じがしますけれども。


さて、実用的といえるような内容はおおむねこのあたりで終りになります。以降はほとんどお遊びの領域になってまいりますのでご用とお急ぎでない方のみおつきあいくださいませ。

使用例3: あの日の干支は?

暦注のひとつに十干十二支というのがあります。土用の丑の日だとか酉の市だとか言ったりするのがこれでありまして、日本のクラシカルなカレンダーを見ると書いてあったりします。
これも曜日と同じような塩梅で求められます。具体的には、ユリウス日が10で割り切れる日が十干の癸(みずのと)、12で割り切れる日が十二支の丑(うし)になります。
したがって、

(nswitch,(calc,(call,ユリウス日,(現在年),(現在月),(現在日))%10+1),癸,甲,乙,丙,丁,戊,己,庚,辛,壬)
(nswitch,(calc,(call,ユリウス日,(現在年),(現在月),(現在日))%12+1),丑,寅,卯,辰,巳,午,未,申,酉,戌,亥,子)

のようにすれば今日の干支が得られ、たとえばその日の十二支によって反応が変わるようなゴーストが、おもしろいかどうかはともかくとして実現できます。

使用例4: UNIX Time

ゴーストにとって使い途があるのかどうか分かりませんが、コンピュータで使われる UNIX Time もユリウス日から簡単に計算できます。
これは要するに1970年01月01日世界時零時 (= 2440587.5ユリウス日) からの経過秒数のことですので、現在の瞬間のそれは

(calc,
((call,ユリウス日,(現在年),(現在月),(現在日)) - 2440588)*86400
+ ((現在時)(-TZ))*3600 + (現在分)*60 + (現在秒)

でいいかと思います。(-TZ)には世界時との時差の正負を逆にして (日本なら -9 ) 代入します。

使用例5: マヤの長期暦

そろそろ悪のりもいいところですがこれで最後です。
マヤ文明によって使われていたカレンダーのひとつ「長期暦」の日付の求めかたを考えてみました。古代文明をテーマにしたゴーストなどにいかがでしょうか。
この暦の起点をいつと解釈するかについては諸説あったりするようですが、ここではユリウス日584283を起点とする説に準拠して話を進めます*1

暦の概要についてはウィキペディアあたりをご参照いただくとして結論を申せば、

(call,長期暦日付,(現在年),(現在月),(現在日))


@長期暦日付
(calc,(長期暦要素)/144000).(calc,(長期暦要素)%144000/7200).(calc,(長期暦要素)%7200/360).(calc,(長期暦要素)%360/20).(calc,(長期暦要素)%20)

@長期暦要素
(calc,(call,ユリウス日,(A0),(A1),(A2))-584283)

と、これで現在のマヤ長期暦での日付が得られます。
たとえば今日は「12.19.17.17.8」という日付になります。


ところで、昨今とみに終末論と関連づけられたりして巷間ひそかにささやかれているように、この長期暦の今サイクルは今からほぼ2年後の2012年12月21日をもって終了いたします*2。幾千年の永きにわたりマヤのカレンダーをご愛顧いただき誠にありがとうございました。悠久なるマヤの民に成り代わりまして、ククルカン神の名においてご挨拶申し上げます。

さて、われらがグレゴリオ暦の2010年も暮れが押し迫ってまいります。どうぞよいお年をお迎えくださいますよう。

*1:参考: マイケル.D.コウ『古代マヤ文明創元社

*2:マヤの神話において、前世界が 13.0.0.0.0 に終了して今の世界のサイクルが始まったことになっているのでそんなふうに言われているんですが、実際のところは暦自体は以後も変らずに計数され続けていくと考えるのが妥当のようではあります