Class CalendarAstronomer
- java.lang.Object
-
- com.ibm.icu.impl.CalendarAstronomer
-
public class CalendarAstronomer extends Object
CalendarAstronomeris a class that can perform the calculations to determine the positions of the sun and moon, the time of sunrise and sunset, and other astronomy-related data. The calculations it performs are in some cases quite complicated, and this utility class saves you the trouble of worrying about them.The measurement of time is a very important part of astronomy. Because astronomical bodies are constantly in motion, observations are only valid at a given moment in time. Accordingly, each
CalendarAstronomerobject has atimeproperty that determines the date and time for which its calculations are performed. You can set and retrieve this property withsetDate,getDateand related methods.Almost all of the calculations performed by this class, or by any astronomer, are approximations to various degrees of accuracy. The calculations in this class are mostly modelled after those described in the book Practical Astronomy With Your Calculator, by Peter J. Duffett-Smith, Cambridge University Press, 1990. This is an excellent book, and if you want a greater understanding of how these calculations are performed it a very good, readable starting point.
WARNING: This class is very early in its development, and it is highly likely that its API will change to some degree in the future. At the moment, it basically does just enough to support
IslamicCalendarandChineseCalendar.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classCalendarAstronomer.EclipticRepresents the position of an object in the sky relative to the ecliptic, the plane of the earth's orbit around the Sun.static classCalendarAstronomer.EquatorialRepresents the position of an object in the sky relative to the plane of the earth's equator.static classCalendarAstronomer.HorizonRepresents the position of an object in the sky relative to the local horizon.
-
Field Summary
Fields Modifier and Type Field Description static com.ibm.icu.impl.CalendarAstronomer.SolarLongitudeAUTUMN_EQUINOXConstant representing the autumnal equinox.static longDAY_MSThe number of milliseconds in one day.static com.ibm.icu.impl.CalendarAstronomer.MoonAgeFIRST_QUARTERConstant representing the moon's first quarter.static com.ibm.icu.impl.CalendarAstronomer.MoonAgeFULL_MOONConstant representing a full moon.static intHOUR_MSThe number of milliseconds in one hour.static longJULIAN_EPOCH_MSThe start of the julian day numbering scheme used by astronomers, which is 1/1/4713 BC (Julian), 12:00 GMT.static com.ibm.icu.impl.CalendarAstronomer.MoonAgeLAST_QUARTERConstant representing the moon's last quarter.static intMINUTE_MSThe number of milliseconds in one minute.static com.ibm.icu.impl.CalendarAstronomer.MoonAgeNEW_MOONConstant representing a new moon.static intSECOND_MSThe number of milliseconds in one second.static doubleSIDEREAL_DAYThe number of standard hours in one sidereal day.static doubleSIDEREAL_MONTHThe average number of days it takes for the moon to return to the same ecliptic longitude relative to the stellar background.static doubleSIDEREAL_YEARThe average number of days it takes for the sun to return to the same position against the fixed stellar background.static doubleSOLAR_DAYThe number of sidereal hours in one mean solar day.static com.ibm.icu.impl.CalendarAstronomer.SolarLongitudeSUMMER_SOLSTICEConstant representing the summer solstice.static doubleSYNODIC_MONTHThe average number of solar days from one new moon to the next.static doubleTROPICAL_YEARThe average number number of days between successive vernal equinoxes.static com.ibm.icu.impl.CalendarAstronomer.SolarLongitudeVERNAL_EQUINOXConstant representing the vernal equinox.static com.ibm.icu.impl.CalendarAstronomer.SolarLongitudeWINTER_SOLSTICEConstant representing the winter solstice.
-
Constructor Summary
Constructors Constructor Description CalendarAstronomer()Construct a newCalendarAstronomerobject that is initialized to the current date and time.CalendarAstronomer(double longitude, double latitude)Construct a newCalendarAstronomerobject with the given latitude and longitude.CalendarAstronomer(long aTime)Construct a newCalendarAstronomerobject that is initialized to the specified time.CalendarAstronomer(Date d)Construct a newCalendarAstronomerobject that is initialized to the specified date and time.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description CalendarAstronomer.EquatorialeclipticToEquatorial(double eclipLong)Convert from ecliptic longitude to equatorial coordinates.CalendarAstronomer.EquatorialeclipticToEquatorial(double eclipLong, double eclipLat)Convert from ecliptic to equatorial coordinates.CalendarAstronomer.EquatorialeclipticToEquatorial(CalendarAstronomer.Ecliptic ecliptic)Convert from ecliptic to equatorial coordinates.CalendarAstronomer.HorizoneclipticToHorizon(double eclipLong)DategetDate()Get the current time of thisCalendarAstronomerobject, represented as aDateobject.doublegetGreenwichSidereal()Returns the current Greenwich sidereal time, measured in hoursdoublegetJulianCentury()Return this object's time expressed in julian centuries: the number of centuries after 1/1/1900 AD, 12:00 GMTdoublegetJulianDay()Get the current time of thisCalendarAstronomerobject, expressed as a "julian day number", which is the number of elapsed days since 1/1/4713 BC (Julian), 12:00 GMT.doublegetLocalSidereal()Returns the current local sidereal time, measured in hoursdoublegetMoonAge()The "age" of the moon at the time specified in this object.doublegetMoonPhase()Calculate the phase of the moon at the time set in this object.CalendarAstronomer.EquatorialgetMoonPosition()The position of the moon at the time set on this object, in equatorial coordinates.longgetMoonRiseSet(boolean rise)Returns the time (GMT) of sunrise or sunset on the local date to which this calendar is currently set.longgetMoonTime(double desired, boolean next)Find the next or previous time at which the Moon's ecliptic longitude will have the desired value.longgetMoonTime(com.ibm.icu.impl.CalendarAstronomer.MoonAge desired, boolean next)Find the next or previous time at which the moon will be in the desired phase.doublegetSunLongitude()The longitude of the sun at the time specified by this object.CalendarAstronomer.EquatorialgetSunPosition()The position of the sun at this object's current date and time, in equatorial coordinates.longgetSunRiseSet(boolean rise)Returns the time (GMT) of sunrise or sunset on the local date to which this calendar is currently set.longgetSunTime(double desired, boolean next)Find the next time at which the sun's ecliptic longitude will have the desired value.longgetSunTime(com.ibm.icu.impl.CalendarAstronomer.SolarLongitude desired, boolean next)Find the next time at which the sun's ecliptic longitude will have the desired value.longgetTime()Get the current time of thisCalendarAstronomerobject, represented as the number of milliseconds since 1/1/1970 AD 0:00 GMT (Gregorian).Stringlocal(long localMillis)voidsetDate(Date date)Set the current date and time of thisCalendarAstronomerobject.voidsetJulianDay(double jdn)Set the current date and time of thisCalendarAstronomerobject.voidsetTime(long aTime)Set the current date and time of thisCalendarAstronomerobject.
-
-
-
Field Detail
-
SIDEREAL_DAY
public static final double SIDEREAL_DAY
The number of standard hours in one sidereal day. Approximately 24.93.- See Also:
- Constant Field Values
-
SOLAR_DAY
public static final double SOLAR_DAY
The number of sidereal hours in one mean solar day. Approximately 24.07.- See Also:
- Constant Field Values
-
SYNODIC_MONTH
public static final double SYNODIC_MONTH
The average number of solar days from one new moon to the next. This is the time it takes for the moon to return the same ecliptic longitude as the sun. It is longer than the sidereal month because the sun's longitude increases during the year due to the revolution of the earth around the sun. Approximately 29.53.- See Also:
SIDEREAL_MONTH, Constant Field Values
-
SIDEREAL_MONTH
public static final double SIDEREAL_MONTH
The average number of days it takes for the moon to return to the same ecliptic longitude relative to the stellar background. This is referred to as the sidereal month. It is shorter than the synodic month due to the revolution of the earth around the sun. Approximately 27.32.- See Also:
SYNODIC_MONTH, Constant Field Values
-
TROPICAL_YEAR
public static final double TROPICAL_YEAR
The average number number of days between successive vernal equinoxes. Due to the precession of the earth's axis, this is not precisely the same as the sidereal year. Approximately 365.24- See Also:
SIDEREAL_YEAR, Constant Field Values
-
SIDEREAL_YEAR
public static final double SIDEREAL_YEAR
The average number of days it takes for the sun to return to the same position against the fixed stellar background. This is the duration of one orbit of the earth about the sun as it would appear to an outside observer. Due to the precession of the earth's axis, this is not precisely the same as the tropical year. Approximately 365.25.- See Also:
TROPICAL_YEAR, Constant Field Values
-
SECOND_MS
public static final int SECOND_MS
The number of milliseconds in one second.- See Also:
- Constant Field Values
-
MINUTE_MS
public static final int MINUTE_MS
The number of milliseconds in one minute.- See Also:
- Constant Field Values
-
HOUR_MS
public static final int HOUR_MS
The number of milliseconds in one hour.- See Also:
- Constant Field Values
-
DAY_MS
public static final long DAY_MS
The number of milliseconds in one day.- See Also:
- Constant Field Values
-
JULIAN_EPOCH_MS
public static final long JULIAN_EPOCH_MS
The start of the julian day numbering scheme used by astronomers, which is 1/1/4713 BC (Julian), 12:00 GMT. This is given as the number of milliseconds since 1/1/1970 AD (Gregorian), a negative number. Note that julian day numbers and the Julian calendar are not the same thing. Also note that julian days start at noon, not midnight.- See Also:
- Constant Field Values
-
VERNAL_EQUINOX
public static final com.ibm.icu.impl.CalendarAstronomer.SolarLongitude VERNAL_EQUINOX
Constant representing the vernal equinox. For use withgetSunTime. Note: In this case, "vernal" refers to the northern hemisphere's seasons.
-
SUMMER_SOLSTICE
public static final com.ibm.icu.impl.CalendarAstronomer.SolarLongitude SUMMER_SOLSTICE
Constant representing the summer solstice. For use withgetSunTime. Note: In this case, "summer" refers to the northern hemisphere's seasons.
-
AUTUMN_EQUINOX
public static final com.ibm.icu.impl.CalendarAstronomer.SolarLongitude AUTUMN_EQUINOX
Constant representing the autumnal equinox. For use withgetSunTime. Note: In this case, "autumn" refers to the northern hemisphere's seasons.
-
WINTER_SOLSTICE
public static final com.ibm.icu.impl.CalendarAstronomer.SolarLongitude WINTER_SOLSTICE
Constant representing the winter solstice. For use withgetSunTime. Note: In this case, "winter" refers to the northern hemisphere's seasons.
-
NEW_MOON
public static final com.ibm.icu.impl.CalendarAstronomer.MoonAge NEW_MOON
Constant representing a new moon. For use withgetMoonTime
-
FIRST_QUARTER
public static final com.ibm.icu.impl.CalendarAstronomer.MoonAge FIRST_QUARTER
Constant representing the moon's first quarter. For use withgetMoonTime
-
FULL_MOON
public static final com.ibm.icu.impl.CalendarAstronomer.MoonAge FULL_MOON
Constant representing a full moon. For use withgetMoonTime
-
LAST_QUARTER
public static final com.ibm.icu.impl.CalendarAstronomer.MoonAge LAST_QUARTER
Constant representing the moon's last quarter. For use withgetMoonTime
-
-
Constructor Detail
-
CalendarAstronomer
public CalendarAstronomer()
Construct a newCalendarAstronomerobject that is initialized to the current date and time.
-
CalendarAstronomer
public CalendarAstronomer(Date d)
Construct a newCalendarAstronomerobject that is initialized to the specified date and time.
-
CalendarAstronomer
public CalendarAstronomer(long aTime)
Construct a newCalendarAstronomerobject that is initialized to the specified time. The time is expressed as a number of milliseconds since January 1, 1970 AD (Gregorian).- See Also:
Date.getTime()
-
CalendarAstronomer
public CalendarAstronomer(double longitude, double latitude)Construct a newCalendarAstronomerobject with the given latitude and longitude. The object's time is set to the current date and time.- Parameters:
longitude- The desired longitude, in degrees east of the Greenwich meridian.latitude- The desired latitude, in degrees. Positive values signify North, negative South.- See Also:
Date.getTime()
-
-
Method Detail
-
setTime
public void setTime(long aTime)
Set the current date and time of thisCalendarAstronomerobject. All astronomical calculations are performed based on this time setting.- Parameters:
aTime- the date and time, expressed as the number of milliseconds since 1/1/1970 0:00 GMT (Gregorian).- See Also:
setDate(java.util.Date),getTime()
-
setDate
public void setDate(Date date)
Set the current date and time of thisCalendarAstronomerobject. All astronomical calculations are performed based on this time setting.- Parameters:
date- the time and date, expressed as aDateobject.- See Also:
setTime(long),getDate()
-
setJulianDay
public void setJulianDay(double jdn)
Set the current date and time of thisCalendarAstronomerobject. All astronomical calculations are performed based on this time setting.- Parameters:
jdn- the desired time, expressed as a "julian day number", which is the number of elapsed days since 1/1/4713 BC (Julian), 12:00 GMT. Note that julian day numbers start at noon. To get the jdn for the corresponding midnight, subtract 0.5.- See Also:
getJulianDay(),JULIAN_EPOCH_MS
-
getTime
public long getTime()
Get the current time of thisCalendarAstronomerobject, represented as the number of milliseconds since 1/1/1970 AD 0:00 GMT (Gregorian).- See Also:
setTime(long),getDate()
-
getDate
public Date getDate()
Get the current time of thisCalendarAstronomerobject, represented as aDateobject.- See Also:
setDate(java.util.Date),getTime()
-
getJulianDay
public double getJulianDay()
Get the current time of thisCalendarAstronomerobject, expressed as a "julian day number", which is the number of elapsed days since 1/1/4713 BC (Julian), 12:00 GMT.- See Also:
setJulianDay(double),JULIAN_EPOCH_MS
-
getJulianCentury
public double getJulianCentury()
Return this object's time expressed in julian centuries: the number of centuries after 1/1/1900 AD, 12:00 GMT- See Also:
getJulianDay()
-
getGreenwichSidereal
public double getGreenwichSidereal()
Returns the current Greenwich sidereal time, measured in hours
-
getLocalSidereal
public double getLocalSidereal()
Returns the current local sidereal time, measured in hours
-
eclipticToEquatorial
public final CalendarAstronomer.Equatorial eclipticToEquatorial(CalendarAstronomer.Ecliptic ecliptic)
Convert from ecliptic to equatorial coordinates.- Parameters:
ecliptic- A point in the sky in ecliptic coordinates.- Returns:
- The corresponding point in equatorial coordinates.
-
eclipticToEquatorial
public final CalendarAstronomer.Equatorial eclipticToEquatorial(double eclipLong, double eclipLat)
Convert from ecliptic to equatorial coordinates.- Parameters:
eclipLong- The ecliptic longitudeeclipLat- The ecliptic latitude- Returns:
- The corresponding point in equatorial coordinates.
-
eclipticToEquatorial
public final CalendarAstronomer.Equatorial eclipticToEquatorial(double eclipLong)
Convert from ecliptic longitude to equatorial coordinates.- Parameters:
eclipLong- The ecliptic longitude- Returns:
- The corresponding point in equatorial coordinates.
-
eclipticToHorizon
public CalendarAstronomer.Horizon eclipticToHorizon(double eclipLong)
-
getSunLongitude
public double getSunLongitude()
The longitude of the sun at the time specified by this object. The longitude is measured in radians along the ecliptic from the "first point of Aries," the point at which the ecliptic crosses the earth's equatorial plane at the vernal equinox.Currently, this method uses an approximation of the two-body Kepler's equation for the earth and the sun. It does not take into account the perturbations caused by the other planets, the moon, etc.
-
getSunPosition
public CalendarAstronomer.Equatorial getSunPosition()
The position of the sun at this object's current date and time, in equatorial coordinates.
-
getSunTime
public long getSunTime(double desired, boolean next)Find the next time at which the sun's ecliptic longitude will have the desired value.
-
getSunTime
public long getSunTime(com.ibm.icu.impl.CalendarAstronomer.SolarLongitude desired, boolean next)Find the next time at which the sun's ecliptic longitude will have the desired value.
-
getSunRiseSet
public long getSunRiseSet(boolean rise)
Returns the time (GMT) of sunrise or sunset on the local date to which this calendar is currently set. NOTE: This method only works well if this object is set to a time near local noon. Because of variations between the local official time zone and the geographic longitude, the computation can flop over into an adjacent day if this object is set to a time near local midnight.
-
getMoonPosition
public CalendarAstronomer.Equatorial getMoonPosition()
The position of the moon at the time set on this object, in equatorial coordinates.
-
getMoonAge
public double getMoonAge()
The "age" of the moon at the time specified in this object. This is really the angle between the current ecliptic longitudes of the sun and the moon, measured in radians.- See Also:
getMoonPhase()
-
getMoonPhase
public double getMoonPhase()
Calculate the phase of the moon at the time set in this object. The returned phase is adoublein the range0 <= phase < 1, interpreted as follows:- 0.00: New moon
- 0.25: First quarter
- 0.50: Full moon
- 0.75: Last quarter
- See Also:
getMoonAge()
-
getMoonTime
public long getMoonTime(double desired, boolean next)Find the next or previous time at which the Moon's ecliptic longitude will have the desired value.- Parameters:
desired- The desired longitude.next- true if the next occurrance of the phase is desired, false for the previous occurrance.
-
getMoonTime
public long getMoonTime(com.ibm.icu.impl.CalendarAstronomer.MoonAge desired, boolean next)Find the next or previous time at which the moon will be in the desired phase.- Parameters:
desired- The desired phase of the moon.next- true if the next occurrance of the phase is desired, false for the previous occurrance.
-
getMoonRiseSet
public long getMoonRiseSet(boolean rise)
Returns the time (GMT) of sunrise or sunset on the local date to which this calendar is currently set.
-
local
public String local(long localMillis)
-
-