to.tetramorph.kyuureki
クラス KyuurekiAlmanac

java.lang.Object
  上位を拡張 to.tetramorph.kyuureki.KyuurekiAlmanac

public class KyuurekiAlmanac
extends Object

グレゴリオ暦を定気法による日本の旧暦(天保暦)に変換する暦。
変換可能な範囲は1820-12-02から2100-11-30まで。
旧暦は新月の日を暦月の1日目とするため、タイムゾーンの影響を受け、時差が変化すれ ば暦も変化してしまう。たとえば日本で深夜0時から1時に新月を迎えた日、台湾や中国 時間ではまだ前日で、台湾時間で暦を作れば暦月の開始が1日過去の方向にずれて 一ヶ月の日数も1日増えることになる。
 データを増やせばもっと期間を拡張することもできるが、実用範囲はカバーしている と思われる。現在のデータは約30KBである。
 日付をインクリメントしながら参照した場合と、ランダムにした場合ではかなり速度 に差がある。これはすべての旧暦データをもっているわけではなく、新月とその暦月の データをもっていて、要求に応じてその月のカレンダーを生成しキャッシュするため で、キャッシュが効率的に機能すれば応答は速くなる。ランダムだとキャッシュは 有効に働かず、そのつどカレンダーを作り直すので効率が低下する。 サポートしている期間のうち約55500日分の日付で実験したところ、インクリメントの ときは0.26秒、ランダムのときは9.9秒、デクリメントのときは0.42秒だった。

サマータイムによる時差補正はTimeZoneの実装に依存している。 日本で1948-1951年まで実施されたサマータイムは、実装に含まれていない。 (と思う、多分)


コンストラクタの概要
KyuurekiAlmanac()
          デフォルトのタイムゾーンでKyuureki オブジェクトを作成する
 
メソッドの概要
 KyuurekiDate getKyuurekiDate(Calendar cal)
          カレンダーで指定されたグレゴリオ暦の年月日を旧暦に変換して返す。
 KyuurekiDate getKyuurekiDate(Calendar cal, double lon)
          カレンダーで指定されたグレゴリオ暦を、サマータイムの実施の有無、 観測地の時差を考慮して時刻補正し旧暦に変換して返す。
 KyuurekiDate getKyuurekiDate(Calendar cal, double lon, KyuurekiSupplement sap)
          カレンダーで指定されたグレゴリオ暦を、サマータイムの実施の有無、 観測地の時差を考慮して時刻補正し旧暦に変換して返す。
 KyuurekiDate getKyuurekiDate(int year, int month, int day)
          グレゴリオ暦を旧暦に変換して返す。
 List<KyuurekiDate> getKyuurekiDateList(int year, int month, int day, int length)
          グレゴリオ暦で指定された日から指定日数分の旧暦データを返す。
 int getMaximumRange()
          変換可能なグレゴリオ暦の最後の日付を返す。"
 int getMinimumRange()
          変換可能なグレゴリオ暦の最初の日付を返す。"
 TimeZone getTimeZone()
          このオブジェクトが使用しているタイムゾーンを返す。
static void main(String[] args)
           
protected  void setTimeZone(TimeZone timeZone)
          タイムゾーンをセットする。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

KyuurekiAlmanac

public KyuurekiAlmanac()
デフォルトのタイムゾーンでKyuureki オブジェクトを作成する

メソッドの詳細

setTimeZone

protected void setTimeZone(TimeZone timeZone)
タイムゾーンをセットする。


getTimeZone

public TimeZone getTimeZone()
このオブジェクトが使用しているタイムゾーンを返す。


getMaximumRange

public int getMaximumRange()
変換可能なグレゴリオ暦の最後の日付を返す。"20321202"といった値。


getMinimumRange

public int getMinimumRange()
変換可能なグレゴリオ暦の最初の日付を返す。"19201210"といった値。


getKyuurekiDate

public KyuurekiDate getKyuurekiDate(int year,
                                    int month,
                                    int day)
グレゴリオ暦を旧暦に変換して返す。時間情報は考慮されない。 時差補正、23時以降の日の繰上、サマータイムによる補正は行わない。

パラメータ:
year - 年
month - 月(1-12)
day - 日(1-31)
例外:
IllegalArgumentException - 変換可能な範囲外の日付が指定されたとき。

getKyuurekiDate

public KyuurekiDate getKyuurekiDate(Calendar cal)
カレンダーで指定されたグレゴリオ暦の年月日を旧暦に変換して返す。 時間情報は考慮されない。 getKyuurekiDate(int year,int month,int day) と振る舞いは同じ。


getKyuurekiDate

public KyuurekiDate getKyuurekiDate(Calendar cal,
                                    double lon)
カレンダーで指定されたグレゴリオ暦を、サマータイムの実施の有無、 観測地の時差を考慮して時刻補正し旧暦に変換して返す。
紫微斗数などの占いで命盤の作成に必要な旧暦日はこのメソッドを使って求める。
計算の過程でどのような補正が行われたかの情報を取得したい場合は、 getKyuurekiDate( Calendar cal,double lon,KyuurekiSupplement sap)を使用する。


getKyuurekiDate

public KyuurekiDate getKyuurekiDate(Calendar cal,
                                    double lon,
                                    KyuurekiSupplement sap)
カレンダーで指定されたグレゴリオ暦を、サマータイムの実施の有無、 観測地の時差を考慮して時刻補正し旧暦に変換して返す。
紫微斗数などの占いで命盤の作成に必要な旧暦日はこのメソッドを使って求める。
観測地の時差の考慮とは、指定された経度を UTCからの時差に変換しこの オブジェクトが使用しているTimeZone#getRawOffset値から引いて差を求める。 (この値はマイナスになる事もある)。その差分をカレンダーの日時に加算して 時間を補正する。
また時差補正後の時刻が23時以降なら翌日とみなし旧暦月日を返す。
sapは、計算した際にどのような日時補正を行ったかの情報を書きこむためのもの。

パラメータ:
cal - 日付とタイムゾーンをセットしたカレンダー
lon - 観測地の経度(±0〜180)
sap - 計算の補足情報を返すオブジェクト

getKyuurekiDateList

public List<KyuurekiDate> getKyuurekiDateList(int year,
                                              int month,
                                              int day,
                                              int length)
グレゴリオ暦で指定された日から指定日数分の旧暦データを返す。 year,month,dayにはグレゴリオ暦の年月日を指定。月は1-12。

パラメータ:
length - 取り出す日数。
戻り値:
旧暦日のリスト
例外:
IllegalArgumentException - 暦範囲外の日時やlengthに0以下の値が 入力されたとき。

main

public static void main(String[] args)