月齢を求める
月齢 - Wikipedia の中にグレゴリオ歴からの月齢計算というところがありますが、これに沿って計算してみます。 プログラム自体は難しいものではありませんが、日付を扱うため、gawk 限定のプログラムになっています。
#! /usr/local/bin/gawk -f
# moon.awk
# 月齢を計算します。
# Ref: http://ja.wikipedia.org/wiki/%E6%9C%88%E9%BD%A2
# usage: gawk -f moon.awk [YYYY-MM-DD]
BEGIN {
date = ARGV[1] ? ARGV[1] : strftime("%Y-%m-%d");
split(date, arr_date, /-/);
year = arr_date[1] + 0;
month = arr_date[2] + 0;
day = arr_date[3] + 0;
c[1] = 0;
c[2] = 2;
c[3] = 0;
c[4] = 2;
c[5] = 2;
c[6] = 4;
c[7] = 5;
c[8] = 6;
c[9] = 7;
c[10] = 8;
c[11] = 9;
c[12] = 10;
phase = (((year - 11) % 19) * 11 + c[month] + day) % 30;
print year " 年 " month " 月 " day " 日の月齢は " phase " です。";
}
このような比較的簡単な式で計算することができるようです。
$ gawk -f moon.awk 2009 年 9 月 5 日の月齢は 15 です。 $ gawk -f moon.awk 2009-09-06 2009 年 9 月 6 日の月齢は 16 です。
上記 URL の下の方に月名が載っていますので、こうした名前に変換するのも面白いと思います。


