|
mhuss utils 1.1.5ws | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.mhuss.AstroLib.DateOps
public class DateOps
A class to perform calendrical conversions.
Note that the Julian Day Number (JD), widely used in astronomical calculations, is different from and not directly related to the Julian Calendar discussed below.
Based on code by Bill Gray (www.projectpluto.com)
Bill Gray's Comments:
General calendrical comments:
This code supports conversions between JD and two calendrical systems: Julian and Gregorian. Comments pertaining to specific calendars are found near the code for those calendars.
[mhuss: The original C code, which these comments are paraphrased from, supported other calendars - these may be supported here in the future, but for now we're pretty Gregorian.]
For each calendar, there is a (cal)DateConversionData" class, used only within this code module. This class takes a particular year number, and computes the JD corresponding to "new years day" (first day of the first month) in that calendar in that year. It also figures out the number of days in each month of that year, returned in the array month_data[]. There can be up to 13 months, because the Hebrew calendar (and some others that may someday be added) can include an "intercalary month". If a month doesn't exist, then the month_data[] entry for it will be zero (thus, in the Gregorian and Julian and Islamic calendars, month_data[12] is always zero, since these calendars have only 12 months.)
[mhuss: The code here only supports Gregorian and Julian, so the class is just called DateConversionData. When I get around to doing the rest, DateConversionData will be the interface or base class used by all.]
The next level up is the getCalendarData() function, which can get the JD of New Years Day and the array of months for any given year for any (supported) calendar. Above this point, all calendars can be treated in a common way; one is shielded from the oddities of individual calendrical systems.
Finally, at the top level, we reach the only functionality that is exported for the rest of the world to use: dmyToDay() and dayToDmy(). The first (and its variations) takes a day, month, year, and optionally, a calendar system. It calls getCalendarData() for the given year, adds in the days in the months intervening New Years Day and the desired month, adds in the day of the month, and returns the resulting Julian Day.
dayToDmy() reverses this process. It finds an "approximate" year corresponding to an input JD, and calls getCalendarData() for that year. By adding all the monthData[] values for that year, it can also find the JD for the end of that year; if the input JD is outside that range, it may have to back up a year or add in a year. Once it finds the year where "JD of New Years Day < JD < JD of New Years Eve", it's a simple matter to track down which month and day of the month corresponds to the input JD.
Field Summary | |
---|---|
static int |
GREGORIAN
Pseudo-enum for calendar type |
static int |
JULIAN
Pseudo-enum for calendar type |
Constructor Summary | |
---|---|
DateOps()
|
Method Summary | |
---|---|
static long |
calendarToDay(java.util.Calendar cal)
Convert a Java Calendar to Julian day value in long form. |
static double |
calendarToDoubleDay(java.util.Calendar cal)
Convert a Java Calendar to a Julian day value in double form. |
static long |
dmyToDay(AstroDate d)
Converts an AstroDate to a Julian day in long form. |
static long |
dmyToDay(int day,
int month,
int year)
Converts a GREGORIAN day/month/year to a Julian day in long form. |
static long |
dmyToDay(int day,
int month,
int year,
int calendar)
Converts a day/month/year to a Julian day in long form. |
static double |
dmyToDoubleDay(AstroDate d)
Converts a day/month/year to a Julian day in double form. |
static long |
dstEnd(int year)
Calculate the Julian day number for the date when Daylight time ends in a given year. |
static long |
dstStart(int year)
Calculate the Julian day number for the date when Daylight time starts in a given year. |
static void |
main(java.lang.String[] args)
(for unit testing only) |
static long |
nowToDay()
Calculate the current Julian day value in long form. |
static double |
nowToDoubleDay()
Calculate the current Julian day value in double form. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final int GREGORIAN
public static final int JULIAN
Constructor Detail |
---|
public DateOps()
Method Detail |
---|
public static long dmyToDay(int day, int month, int year, int calendar)
day
- Day of the month (1..31)month
- Month of the Year (1..12)year
- Yearcalendar
- GREGORIAN or JULIAN
public static long dmyToDay(int day, int month, int year)
day
- Day of the month (1..31)month
- Month of the Year (1..12)year
- Year
public static long dmyToDay(AstroDate d)
d
- AstroDate to convert
public static double dmyToDoubleDay(AstroDate d)
d
- AstroDate to convert
public static long calendarToDay(java.util.Calendar cal)
cal
- java.util.Calendar to convert
public static double calendarToDoubleDay(java.util.Calendar cal)
cal
- java.util.Calendar to convert
public static double nowToDoubleDay()
public static long nowToDay()
public static long dstStart(int year)
The chosen start day is the first Sunday in April, and therefore this function may not be applicable outside the U.S.
year
- The year of interest
public static long dstEnd(int year)
This chosen day is the last Sunday in October, and therefore this function may not be applicable outside the U.S.
year
- The year of interest
public static void main(java.lang.String[] args)
|
mhuss utils 1.1.5ws | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |