|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Objectto.tetramorph.time.JDay
public class JDay
文字列表現の日付・時間・タイムゾーンから、ユリウス日を返すクラス。
ユリウス日を求める場合はつねにこのクラスを利用しスイスエフェメリスのSweDateは
使わない。
というのはユリウス日は天体や暦計算にはよく使用するので、
スイスエフェメリスに依存していると、ライセンスの問題等で不便がある。
プログラムを単純化できるという理由から、ユリウス日を求める公式は使用せず、
カレンダーのミリ秒表現から直接変換する方法を使っている。
TimePlace.getJDay()もこのクラスを呼び出している。
メソッドの概要 | |
---|---|
static double |
get(java.util.Calendar cal)
カレンダーのユリウス日を返す。 |
static double |
get(int year,
int month,
int day)
グレゴリオ暦年月日からユリウス日を求めて返す。 |
static double |
get(int era,
int year,
int month,
int day,
int hour,
int minute,
int second,
java.util.TimeZone tz)
グレゴリオ暦の日時とタイムゾーンからユリウス日を返す。 |
static java.lang.Double |
get(java.lang.String era,
java.lang.String sqlDate,
java.lang.String sqlTime,
java.lang.String tzid,
java.lang.String defaultTime)
文字列での日時表現からユリウス日を返す。 |
static void |
getCalendar(double jday,
java.util.Calendar cal)
ユリウス日をカレンダーにセットする。 |
static java.util.GregorianCalendar |
getCalendar(double jday,
java.util.TimeZone tz)
ユリウス日をグレゴリオ暦に変換する。 |
static java.util.Calendar |
getJSTCalendar(int year,
int month,
int day)
夏時間のない日本時間のカレンダーを返す。 |
static java.util.Calendar |
getJSTCalendar(int year,
int month,
int day,
int hour,
int minute,
int second)
夏時間のない日本時間のカレンダーを返す。 |
static java.util.TimeZone |
getJSTZone()
夏時間判定をしない日本のTimeZoneオブジェクトを返す。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
メソッドの詳細 |
---|
public static double get(int year, int month, int day)
year
- グレゴリオ年month
- 1-12を指定。day
- 1-31を指定。public static java.lang.Double get(java.lang.String era, java.lang.String sqlDate, java.lang.String sqlTime, java.lang.String tzid, java.lang.String defaultTime)
era
- "AD"または"BC"を指定する。sqlDate
- "2008-02-22"といったSQLでの日付文字列を指定。sqlTime
- "12:00:00"といったSQLでの時刻文字列を指定。tzid
- "UTC"や"JST"といったTimeZoneクラスがサポートするIDを指定。defaultTime
- 時刻がnullの場合に採用する地方時("hh:mm:dd")public static double get(java.util.Calendar cal)
AD 1948-05-02(日) 23:32:09 millis = -683720871000 sd = 2432674.1056597224 md = 2432674.0639930554, sd - md = 0.041666666977107525ところが、Calendarクラスには、それを判定するメソッドが用意されていないのと、 TimeZone.useDaylightTimeは、この古い夏時間を認識しない。暗黙のうちに、 サマータイムの期間は1時間ずらして日時が求まる仕組みになっている。 今いちよくわかっていないのだが、これは天体位置計算では要注意である。 (3)ミリ秒桁がゼロになっている場合、ほとんどの場合はSweDate.getJulDayと 一致するが、一致しない場合のもう一つの例は次のようなもの。
BC 4669-11-03(土) 06:53:34 millis = -209451751586000 sd = 16377.412199074075 md = 16377.412199074073このメソッドで夏時間に切り替わる期間を狙って、ユリウス日を求めてみると、 同じ0時でもユリウス日の値が変わる事がわかる。
JST0時におけるユリウス日 1948-05-01 00:00:00,2432672.125000 1948-05-02 00:00:00,2432673.125000 (01:00から夏時間に切り替わる) 1948-05-03 00:00:00,2432674.083333 (夏時間になった次の日、jdはずれる) 1948-05-04 00:00:00,2432675.083333末尾の桁でわずかに値が異なる。これは計算誤差によるものだが、この桁だと ピコ秒単位での違いでしかなくまったく問題にならない。
日本でのサマータイム実施は1949-1951年でCalendar.getInstance()などで取得した デフォルトのタイムゾーンのカレンダーに、この期間の日付をセットしてを渡すと、 このメソッドは1時間の時差を考慮した値をこのメソッドは返す。 1948-05-02(日) 01:00 1948-09-12 00:00(日) 1949-04-03(日) 01:00 1949-09-11 00:00(日) 1950-05-07(日) 01:00 1950-09-10 00:00(日) 1951-05-06(日) 01:00 1951-09-09 00:00(日)日本における天体計算では、このような夏時間は邪魔になることが多い。これを回避 するためにはTimeZoneをUTCで取得後、setRawOffsetで32400000をセットし、 そのオブジェクトをCalendarにセットすればいい。
public static double get(int era, int year, int month, int day, int hour, int minute, int second, java.util.TimeZone tz)
era
- GregorianCalendar.ADまたはBC。year
- 年month
- 月(0-11)day
- 日hour
- 時minute
- 分second
- 秒tz
- TimeZoneオブジェクトpublic static java.util.GregorianCalendar getCalendar(double jday, java.util.TimeZone tz)
jday
- ユリウス日tz
- タイムゾーンpublic static void getCalendar(double jday, java.util.Calendar cal)
jday
- セットするユリウス日cal
- セットされるカレンダーpublic static java.util.TimeZone getJSTZone()
public static java.util.Calendar getJSTCalendar(int year, int month, int day, int hour, int minute, int second)
public static java.util.Calendar getJSTCalendar(int year, int month, int day)
|
||||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |