From 3b3d256e67fcf25cd7cb598d9d1961201e6b880e Mon Sep 17 00:00:00 2001 From: xtof Date: Mon, 16 Dec 2019 23:22:28 +0100 Subject: [PATCH] feat : add module jours julien --- ModuleJourJulien/pom.xml | 51 ++ .../main/java/org/josast/util/date/Day.java | 23 + .../org/josast/util/date/GenericDate.java | 212 +++++++++ .../java/org/josast/util/date/JulianDay.java | 447 ++++++++++++++++++ .../org/josast/util/date/JulianDay2000.java | 39 ++ .../org/josast/util/date/SideralTime.java | 87 ++++ .../org/josast/util/date/GenericDateTest.java | 47 ++ .../org/josast/util/date/JulianDayTest.java | 179 +++++++ 8 files changed, 1085 insertions(+) create mode 100644 ModuleJourJulien/pom.xml create mode 100644 ModuleJourJulien/src/main/java/org/josast/util/date/Day.java create mode 100644 ModuleJourJulien/src/main/java/org/josast/util/date/GenericDate.java create mode 100644 ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay.java create mode 100644 ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay2000.java create mode 100644 ModuleJourJulien/src/main/java/org/josast/util/date/SideralTime.java create mode 100644 ModuleJourJulien/src/test/java/org/josast/util/date/GenericDateTest.java create mode 100644 ModuleJourJulien/src/test/java/org/josast/util/date/JulianDayTest.java diff --git a/ModuleJourJulien/pom.xml b/ModuleJourJulien/pom.xml new file mode 100644 index 00000000..1721f98d --- /dev/null +++ b/ModuleJourJulien/pom.xml @@ -0,0 +1,51 @@ + + + + + + org.josast + JOSAST-parent + 0.0.2-SNAPSHOT + + + 4.0.0 + + ModuleJourJulien + Module Jour Julien + + jar + + + 1.8 + 1.8 + ${env.JAVA_HOME} + 0.1.5 + + + + + + + org.josast + ModuleConfig + 0.2 + + + + org.josast + ModuleUtil + 0.0.2-SNAPSHOT + + + + junit + junit + 3.8.1 + test + + + + + \ No newline at end of file diff --git a/ModuleJourJulien/src/main/java/org/josast/util/date/Day.java b/ModuleJourJulien/src/main/java/org/josast/util/date/Day.java new file mode 100644 index 00000000..93a86e7a --- /dev/null +++ b/ModuleJourJulien/src/main/java/org/josast/util/date/Day.java @@ -0,0 +1,23 @@ +package org.josast.util.date; + +/** + * give main characteristics of a day + * + * @author XTOPHE + * @version $Revision: 1.1 $ + */ +public class Day { + //~ Static fields/initializers ---------------------------------------- + + /** number of second in a day : 86400 */ + public static final double SEC_PER_DAY = 86400.0; + /** number minutes by day */ + public static final double MIN_PER_DAY = 1440.0; + //~ Constructors ------------------------------------------------------ + + /** + * Creates a new Day object. + */ + private Day() { + } +} diff --git a/ModuleJourJulien/src/main/java/org/josast/util/date/GenericDate.java b/ModuleJourJulien/src/main/java/org/josast/util/date/GenericDate.java new file mode 100644 index 00000000..3149c9c7 --- /dev/null +++ b/ModuleJourJulien/src/main/java/org/josast/util/date/GenericDate.java @@ -0,0 +1,212 @@ +package org.josast.util.date; + +/** + * + * Description : generic container for a date. + * + * + *

Projet : JOSAST
+ * + *
+ * + * @author mercier + * @version 1.0 + *

Source Update

+ *
Version : date : name : comments + *
V1 : 1 avr. 2005 : C. Mercier : create file + *

+ * + */ +public class GenericDate { + //~ Instance fields --------------------------------------------------- + + /** DOCUMENT ME! */ + private int _year; + + /** DOCUMENT ME! */ + private int _month; + + /** DOCUMENT ME! */ + private int _day; + + /** DOCUMENT ME! */ + private int _hour; + + /** DOCUMENT ME! */ + private int _minute; + + /** DOCUMENT ME! */ + private int _seconde; + + //~ Constructors ------------------------------------------------------ + + /** + * Creates a new GenericDate object. + *
no verification on the input value
+ * + * @param year 4 digit + * + * @param month 1 to 12 + * + * @param day 1 to 31 + * + * @param hour 1 to 24 + * + * @param minute 1 to 59 + * ! + * @param seconde 1 to 59 + * + */ + public GenericDate(int year, int month, int day, int hour, int minute, + int seconde) { + _year = year; + _month = month; + _day = day; + _hour = hour; + _minute = minute; + _seconde = seconde; + } + + /** + * Creates a new GenericDate object. + * + * @param JulianDate julian day + * + */ + public GenericDate(double JulianDate) { + GenericDate Gd = JulianDay.convertToGenericDate(JulianDate); + _year = Gd._year; + _month = Gd._month; + _day = Gd._day; + _hour = Gd._hour; + _minute = Gd._minute; + _seconde = Gd._seconde; + } + + //~ Methods ----------------------------------------------------------- + + /** + * return the julian day + * + * @return return julian day + */ + public double getJulianDay() { + return (JulianDay.convertToJulianDay(_year, _month, _day, _hour, + _minute, _seconde)); + } + + /** + * + * @return day + */ + public int get_day() { + return _day; + } + + /** + * + * + * @return hours + */ + public int get_hour() { + return _hour; + } + + /** + + * + * @return minute + */ + public int get_minute() { + return _minute; + } + + /** + * + * @return month + */ + public int get_month() { + return _month; + } + + /** + + * + * @return seconde + */ + public int get_seconde() { + return _seconde; + } + + /** + * + * + * @return year + */ + public int get_year() { + return _year; + } + + /** + + * + * @param _day day + * + */ + public void set_day(int _day) { + this._day = _day; + } + + /** + * + * + * @param _hour hour + * + */ + public void set_hour(int _hour) { + this._hour = _hour; + } + + /** + * + * @param _minute minute + */ + public void set_minute(int _minute) { + this._minute = _minute; + } + + /** + * + * @param _month month + */ + public void set_month(int _month) { + this._month = _month; + } + + /** + * + * @param _seconde seconde + */ + public void set_seconde(int _seconde) { + this._seconde = _seconde; + } + + /** + + * + * @param _year year + * + */ + public void set_year(int _year) { + this._year = _year; + } + + /** + * print generic date with the following format dd mm yy hh mn ss + * @return string + */ + public String toString() { + return (" " + _day + " " + _month + " " + _year + " " + _hour + + " " + _minute + " " + _seconde); + } +} diff --git a/ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay.java b/ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay.java new file mode 100644 index 00000000..3626a584 --- /dev/null +++ b/ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay.java @@ -0,0 +1,447 @@ +package org.josast.util.date; + +import java.util.GregorianCalendar; + + + +/** + * Description : Julian day computing
+ * + *

+ * date 7 août 2003 + *

+ * + *

+ * Source Update + *

+ *
date : name : comments
+ * V1 : mercier : create file
+ * V1.1 : Mercier : correction bug moi de février + * + *

+ * This class is a set of static method to use Julian day. + *

+ * + *

+ * Algorithm are based on french version of the Jean Meeus book "Calculs + * Astronomiques à l'usage des Amateurs" editor : société Astronomique de + * France. + *

+ * + *

+ * + * @author XTOPHE josast at + * avmdti.org + * @version 1.1 + */ +public class JulianDay { + //~ Static fields/initializers ---------------------------------------- + + private static final double EPOCH_JAN1_00H_1900 = 2415019.5; // Jan 1.0 1900 + // = Jan 1 1900 + // 00h UTC + + + // = Jan 1 1900 + // 12h UTC + + // = Jan 1 2000 + + /** DOCUMENT ME! */ + private static final double EPOCH_JAN1_12H_1900 = 2415020.0; // Jan 1.5 1900 = Jan 1 1900 12h UTC + // 12h UTC + + //~ Constructors ------------------------------------------------------ + + + + //~ Methods ----------------------------------------------------------- + + + + + // static method in the class, the constructor is not needed + + private JulianDay() + {} + + /** + * Convert epoch from TLE data to julian day + * this method is valid from 1957 through 2056 + * epoch is : yyddd.ddddddd + * where yy is year + * ddd.ddddddd is day of the curent year + * @param epoch + * @return + */ + public static double convertToJulianDay(double epoch) + { + double year, day, JDoE; + /* Valid 1957 through 2056 */ + year = Math.floor(epoch*1.0E-3); + if (year < 57) + year += 2000; + else + year += 1900; + day = epoch - (Math.floor(epoch*1.0E-3))*1.0E3; + JDoE = Julian_Date_of_Year(year) + day; + + return JDoE; + } + + + + + + + + /** + * Astronomical Formulae for Calculators, Jean Meeus, pages 23-25 Calculate + * Julian Date of 0.0 Jan year + * + * @param year + * @return Julian day + */ + public static double Julian_Date_of_Year(double year) + { + /* Astronomical Formulae for Calculators, Jean Meeus, pages 23-25 + Calculate Julian Date of 0.0 Jan year */ + double A, B, JDoY; + year = year - 1.0; + A = Math.floor(year / 100.0); + B = 2.0 - A + Math.floor(A / 4.0); + JDoY = Math.floor(365.25 * year) + Math.floor(30.6001 * 14.0) + 1720994.5 + B; + + return JDoY; + } + + /** + * Method diffdate + * + * This method realise the difference between 2 date. + * The folowing treatement is made : + * - convert the 2 date in Julian Day + * - return the difference between the 2 Julian Day + * . + * @param d1 + * @param d2 + * @return double + */ + public static double diffdate(GregorianCalendar d1, GregorianCalendar d2) { + return (convertToJulianDay(d1) - convertToJulianDay(d2)); + } + + /** + * Method addJours. + * + * This method allows to add a number of day to a date. + * The folowing treatement is made : + * - convert the date to Julian Day + * - add the number of day + * - convert the date to GregorianCalendar + * + * @param d1 date + * @param jour number of day to add + * @return GregorianCalendar + */ + public static GregorianCalendar addDays(GregorianCalendar d1, long jour) { + double JDd1 = convertToJulianDay(d1); + JDd1 += jour; + return (convertToGregorianCalendar(JDd1)); + + } + + /** + * Method convertToJourJulien. + * + * This method convert a date in Julian Day. + * + * This method call the convertToJourJulien(int annee,int mois,int jour,int heure,int minute,int seconde) + * + * @param date + * @return double + */ + public static double convertToJulianDay(GregorianCalendar date) { + + return convertToJulianDay( + date.get(GregorianCalendar.YEAR), + date.get(GregorianCalendar.MONTH)+1, + date.get(GregorianCalendar.DAY_OF_MONTH), + date.get(GregorianCalendar.HOUR_OF_DAY), + date.get(GregorianCalendar.MINUTE), + date.get(GregorianCalendar.SECOND)); + + } + /** + * Method convertToJourJulien. + * + * This method convert a date in Julian Day. + * + * This method call the convertToJourJulien(int annee,int mois,int jour,int heure,int minute,int seconde) + * + * @param date + * @return double + */ + public static double convertToJulianDay(GenericDate date) { + return convertToJulianDay( + date.get_year(), + date.get_month(), + date.get_day(), + date.get_hour(), + date.get_minute(), + date.get_seconde()); + + } + + /** + * Method convertToJourJulien. + * + * This method concert a date in Julian Date. The algorithm from the Jean Meeus book is used. + * + * This method as been tested with the exemple of the book. cf Unit test. + * + * Be carrefull the input are not checked. + * + * + * @param annee positive and negative year coold be used + * @param mois 1->junary 12->december + * @param jour 1 to 31 + * @param heure 0-24 + * @param minute 0-59 + * @param seconde 0-59 + * @return double julian date. + */ + public static double convertToJulianDay( + int annee, + int mois, + int jour, + int heure, + int minute, + int seconde) { + // détection si la date est > 1582.1015 + double A = 0; + double B = 0; + double date = annee + mois / 100.0 + jour / 10000.0; + double JulianDate = 0; + + double y = annee; + double m = mois; + double j = + heure / 24.0 + + ((minute / (24 * 60.0))) + + ((seconde / (3600.0 * 24.0))); +// MCR 15-2-2004 correction suite a un défaut détecté sur le mois de févier +// remplacement du < par <= puisque les mois de janvier et févier sont considéré comme +// les 13eme et 14eme mois. + + if (mois <= 2) { + y = y - 1; + m = m + 12; + } + + if (date > 1582.1015) { + A = ENT(y / 100.0); + B = 2 - A + ENT(A / 4.0); + } else { + A = 0; + B = 0; + } + + if (y > 0) { + JulianDate = + ENT(365.25 * y) + + ENT(30.6001 * (m + 1)) + + jour + + j + + 1720994.5 + + B; + } else { + JulianDate = + ENT(365.25 * y - 0.75) + + ENT(30.6001 * (m + 1)) + + jour + + j + + 1720994.5 + + B; + } + + return (JulianDate); + } + + /** + * + * This method concert a date in Julian Date Modified with origin 1/1/2000 0H. + * + * The time scale used here is a "day number" from 2000 Jan 0.0 TDT, which is the same as 1999 Dec 31.0 TDT, i.e. precisely at midnight TDT at the start of the last day of this century. With the modest accuracy we strive for here, one can usually disregard the difference between TDT (formerly canned ET) and UT. + * + * @param annee + * @param mois + * @param jour + * @param heure + * @param minute + * @param seconde + * @return + */ + public static double convertToJulianDay2000(int annee, + int mois, + int jour, + int heure, + int minute, + int seconde) + { + return (convertToJulianDay(annee,mois,jour,heure,minute,seconde)- 2451543.5d); + } + + /** + * Method convertToGregorianCalendar. + * + * This method convert an Julian date to a Gregorian Calendar date. + * + * @param JulianDate + * @return GregorianCalendar + */ + public static GregorianCalendar convertToGregorianCalendar(double JulianDate) { + double Z = ENT(JulianDate + 0.5); + double A = 0; + if (Z < 2299161) { + A = Z; + } else { + double alpha = ENT((Z - 1867216.25) / 36524.35); + A = Z + 1 + alpha - ENT(alpha / 4); + } + + double F = JulianDate + 0.5 - Z; + + double B = A + 1524; + double C = ENT((B - 122.1) / 365.25); + double D = ENT(365.25 * C); + double E = ENT((B - D) / 30.6001); + double tempjour = (B - D - ENT(30.6001 * E) + F); + + int jour= (int) ENT(tempjour); + double temp = tempjour - jour; + + double ensecondes = 24 * 60 * 60 * temp; + + int heure = (int) ENT(ensecondes / 3600); + int minute = (int) ENT((ensecondes - (3600 * heure)) / 60.0); + int secondes = (int) ensecondes - ((3600 * heure) + (60 * minute)); + int mois = (int) E - 1; + + if (E > 13.5) { + mois = (int) E - 13; + } + + int annee = (int) C - 4716; + if (mois < 2.5) { + annee = (int) C - 4715; + } + System.err.println(""+annee+"" +mois+""+ jour); + return ( + + new GregorianCalendar(annee, mois-1, jour, heure, minute, secondes)); + } + + /** + * Method ENT. + * + * @param valeur + * @return double + */ + private static double ENT(double valeur) { + long l = (long) valeur; + return (l * 1.0); + } + + /** + * Method convertToGenericDate. + * @param JulianDate + * @return GenericDate + */ + public static GenericDate convertToGenericDate(double JulianDate) { + double Z = ENT(JulianDate + 0.5); + double A = 0; + if (Z < 2299161) { + A = Z; + } else { + double alpha = ENT((Z - 1867216.25) / 36524.35); + A = Z + 1 + alpha - ENT(alpha / 4); + } + + double F = JulianDate + 0.5 - Z; + + double B = A + 1524; + double C = ENT((B - 122.1) / 365.25); + double D = ENT(365.25 * C); + double E = ENT((B - D) / 30.6001); + double tempjour = (B - D - ENT(30.6001 * E) + F); + + int jour = (int) ENT(tempjour); + double temp = tempjour - jour; + + double ensecondes = 24 * 60 * 60 * temp; + + int heure = (int) ENT(ensecondes / 3600); + int minute = (int) ENT((ensecondes - (3600 * heure)) / 60.0); + int secondes = (int) ensecondes - ((3600 * heure) + (60 * minute)); + int mois = (int) E - 1; + + if (E > 13.5) { + mois = (int) E - 13; + } + + int annee = (int) C - 4716; + if (mois < 2.5) { + annee = (int) C - 4715; + } + + return (new GenericDate(annee, mois, jour, heure, minute, secondes)); + + } + /** + * DOCUMENT ME! + * + * @param m_Date julian day + * + * @return number of day from 1/1/1900 OH + */ + public static double FromJan1_00h_1900(double m_Date) { + return m_Date - EPOCH_JAN1_00H_1900; + } + + + /** + * DOCUMENT ME! + * + * @param m_Date julian day + * + * @return number of day from 1/1/1900 12H + */ + public static double FromJan1_12h_1900(double m_Date) { + return m_Date - EPOCH_JAN1_12H_1900; + } + + /** + * DOCUMENT ME! + * + * @param m_Date julian day + * + * @return number of day from 1/1/2000 12H + */ + public static double FromJan1_12h_2000(double m_Date) { + return m_Date - EPOCH_JAN1_12H_2000; + } + + + /** DOCUMENT ME! */ + private static final double EPOCH_JAN1_12H_2000 = 2451545.0; // Jan 1.5 2000 = Jan 1 2000 12h UTC + + public static double getFromJan1_12h_2000(double date) { + return date - EPOCH_JAN1_12H_2000; + } + + //~ Constructors ------------------------------------------------------ + + // static method in the class, the constructor is not needed + +} diff --git a/ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay2000.java b/ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay2000.java new file mode 100644 index 00000000..22ce161b --- /dev/null +++ b/ModuleJourJulien/src/main/java/org/josast/util/date/JulianDay2000.java @@ -0,0 +1,39 @@ +package org.josast.util.date; + +/** + * + * Description : julian day with Y2000 reference + * + * + *

Projet : JOSAST
+ * + * + *

for more information contact josast@avmdti.org

+ * @author mercier + * @version 1.0 + *

Source Update

+ *
Version : date : name : comments + *
V1 : 1 avr. 2005 : C. Mercier : create file + *

+ * @deprecated since 1 1 2005 + * + */ + +public class JulianDay2000 { + + private JulianDay2000 () {}; + + //~ Methods ----------------------------------------------------------- + + /** + * + * @see JulianDay#convertToJulianDay2000(int annee, int mois, int jour,int heure, int minute, int seconde) + */ + public static double getTime(int year, int month, int day, int hours, + int minutes, int secondes) { + int d = ((367 * year) - ((7 * (year + ((month + 9) / 12))) / 4) + + ((275 * month) / 9) + day) - 730530; + + return (d + ((hours + (minutes / 60.0) + (secondes / 3600.0)) / 24.0)); + } +} \ No newline at end of file diff --git a/ModuleJourJulien/src/main/java/org/josast/util/date/SideralTime.java b/ModuleJourJulien/src/main/java/org/josast/util/date/SideralTime.java new file mode 100644 index 00000000..2e384007 --- /dev/null +++ b/ModuleJourJulien/src/main/java/org/josast/util/date/SideralTime.java @@ -0,0 +1,87 @@ + +package org.josast.util.date; + +import org.avmdti.josast.util.*; + +/** + * Calculate Greenwich Mean Sidereal Time for the Julian date.
+ * + *

+ * date 7 août 2003 + *

+ * + *

+ * Source Update + *

+ *
date : name : comments
+ * V1 : mercier : create file
+ * + *
+ * + * Explanatory Supplement to the Astronomical Almanac, page 50. // Orbital + * Coordinate Systems, Part III, Dr. T.S. Kelso, Satellite Times, // Nov/Dec + * 1995 + * + *

+ * + * @author XTOPHE josast at + * avmdti.org + * @version 1.0 + */ +/** + * + * + * + */ +public class SideralTime { + + private static final double OMEGA_E = 1.00273790934; // earth rotation per + + /** + * + * Calculate Greenwich Mean Sidereal Time for the Julian date. The return + * value is the angle, in radians, measuring eastward from the Vernal + * Equinox to the prime meridian. This angle is also referred to as "ThetaG" + * (Theta GMST). + * + *
References: The 1992 Astronomical Almanac, page B6. + * Explanatory Supplement to the Astronomical Almanac, page 50. // Orbital + * Coordinate Systems, Part III, Dr. T.S. Kelso, Satellite Times, // Nov/Dec + * 1995 + * + * @param m_Date + * julian date + * @return Greenwich Mean Sidereal Time (in radian) + */ + public static double CalculGMST(double m_Date) { + double UT = MathTools.fmod(m_Date + 0.5, 1.0); + double TU = (JulianDay.FromJan1_12h_2000(m_Date) - UT) / 36525.0; + + double GMST = 24110.54841 + TU + * (8640184.812866 + TU * (0.093104 - TU * 6.2e-06)); + + GMST = MathTools.fmod(GMST + Day.SEC_PER_DAY * OMEGA_E * UT, + Day.SEC_PER_DAY); + + if (GMST < 0.0) + GMST += Day.SEC_PER_DAY; // "wrap" negative modulo value + + return (Math.PI * 2 * (GMST / Day.SEC_PER_DAY)); + } + + + /** + * Calculate Local Mean Sidereal Time for given longitude (for this date). + * The longitude is assumed to be in radians measured west from Greenwich. + * The return value is the angle, in radians, measuring eastward from the + * Vernal Equinox to the given longitude. + * + * @param longitude (in radian) + * @param M_Date Julian date + * @return Local Mean Sidereal Time (in radian) + */ + public static double toLMST(double lon, double M_Date) { + return MathTools.fmod(CalculGMST(M_Date) + lon, Math.PI * 2); + } + +} \ No newline at end of file diff --git a/ModuleJourJulien/src/test/java/org/josast/util/date/GenericDateTest.java b/ModuleJourJulien/src/test/java/org/josast/util/date/GenericDateTest.java new file mode 100644 index 00000000..5e2795f6 --- /dev/null +++ b/ModuleJourJulien/src/test/java/org/josast/util/date/GenericDateTest.java @@ -0,0 +1,47 @@ +package org.josast.util.date; + +import org.josast.util.date.GenericDate; + +import junit.framework.TestCase; + + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision: 1.1 $ + */ +public class GenericDateTest extends TestCase { + //~ Constructors ------------------------------------------------------ + + /** + * Creates a new GenericDateTest object. + * + * @param arg0 DOCUMENT ME! + */ + public GenericDateTest(String arg0) { + super(arg0); + } + + //~ Methods ----------------------------------------------------------- + + /** + *
create a date with Generic Date with Date, Month, Day .. + *
compare to the expected Julian Day + *
create a date with Generic date with Julian Day value + *
compare to the expected Julian Day + */ + public void testGetJulianDay() { + GenericDate Gd = new GenericDate(1950, 5, 19, 22, 30, 00); + GenericDateTest.assertEquals(2433421.4375, Gd.getJulianDay(), 0); + + GenericDate Gd2 = new GenericDate(2433421.4375); + GenericDateTest.assertEquals(2433421.4375, Gd2.getJulianDay(), 0); + GenericDateTest.assertEquals(1950, Gd2.get_year()); + GenericDateTest.assertEquals(5, Gd2.get_month()); + GenericDateTest.assertEquals(19, Gd2.get_day()); + GenericDateTest.assertEquals(22, Gd2.get_hour()); + GenericDateTest.assertEquals(30, Gd2.get_minute()); + GenericDateTest.assertEquals(00, Gd2.get_seconde()); + } +} diff --git a/ModuleJourJulien/src/test/java/org/josast/util/date/JulianDayTest.java b/ModuleJourJulien/src/test/java/org/josast/util/date/JulianDayTest.java new file mode 100644 index 00000000..e3aee245 --- /dev/null +++ b/ModuleJourJulien/src/test/java/org/josast/util/date/JulianDayTest.java @@ -0,0 +1,179 @@ +package org.josast.util.date; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import java.util.GregorianCalendar; + +import org.josast.util.date.JulianDay; + + +/** + * DOCUMENT ME! + * + * @author $author$ + * @version $Revision: 1.2 $ + */ +public class JulianDayTest extends TestCase { + //~ Static fields/initializers ---------------------------------------- + + + private static final int DAY19 = 19; + + + private static final int MONTH4 = 4; + + + private static final int YEAR1990 = 1990; + + + private static final double JULIANDAY1941990 = 3543.0; + + //~ Constructors ------------------------------------------------------ + + /** + * Creates a new JulianDayTest object. + * + * @param arg0 DOCUMENT ME! + */ + public JulianDayTest(String arg0) { + super(arg0); + } + + //~ Methods ----------------------------------------------------------- + + /** + * DOCUMENT ME! + * + * @throws Exception DOCUMENT ME! + */ + protected void setUp() throws Exception { + super.setUp(); + } + + /** + * DOCUMENT ME! + * + * @throws Exception DOCUMENT ME! + */ + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + *
unit test for Julian day convertion from Gregorian Calendar + *
Date used for the test : + *
- 1957 10 4 19 26 24 julian day value expected 2436116.31 + *
- 333 1 27 12 0 0 julian day value expected 1842713.0, + */ + public void testconvertToJulianDayGC() { + GregorianCalendar valeur = new GregorianCalendar(1957, GregorianCalendar.OCTOBER, 4, + 19, 26, 24); + GregorianCalendar valeur1 = new GregorianCalendar(333, GregorianCalendar.JANUARY, 27, 12, + 0, 0); + Assert.assertEquals(1842713.0, + JulianDay.convertToJulianDay(valeur1), 0); + Assert.assertEquals(2436116.31, + JulianDay.convertToJulianDay(valeur), 0); + } + + /** + * unit test for Julian day convertion from a given date + *
333 1 27 12 0 0 julian day value expected 1842713.0 + *
-584 5 28 0 0 0 julian day value expected 1507899.5 + *
1957 10 4 19 26, julian day value expected 24 2436116.31 + *
2000 1 1 12 0 0 julian day value expected 2451545.0 + *
-4712 1 1 12 0 0 julian day value expected 0.0 + *
1999 1 1 0 0 0 julian day value expected 2451179.5 + *
1987 1 27 0 0 0 julian day value expected 2446822.5 + */ + public void testconvertToJulianDay() { + Assert.assertEquals(1842713.0, + JulianDay.convertToJulianDay(333, 1, 27, 12, 0, 0), 0); + Assert.assertEquals(1507899.5, + JulianDay.convertToJulianDay(-584, 5, 28, 0, 0, 0), 0); + Assert.assertEquals(2436116.31, + JulianDay.convertToJulianDay(1957, 10, 4, 19, 26, 24), + 0); + + Assert.assertEquals(2451545.0, + JulianDay.convertToJulianDay(2000, 1, 1, 12, 0, 0), 0); + Assert.assertEquals(0.0, + JulianDay.convertToJulianDay(-4712, 1, 1, 12, 0, 0), 0); + Assert.assertEquals(2451179.5, + JulianDay.convertToJulianDay(1999, 1, 1, 0, 0, 0), 0); + Assert.assertEquals(2446822.5, + JulianDay.convertToJulianDay(1987, 1, 27, 0, 0, 0), 0); + } + + /** + * Unit test to addDays + *
original date 1954 6 28 0, 0, 0 + *
add 1 day + *
expected results 1954 6 29 0 0 0 + * + */ + public void testaddJours() { + GregorianCalendar valeur = new GregorianCalendar(1954, 6, 29, 0, + 0, 0); + GregorianCalendar valeur2 = new GregorianCalendar(1954, 6, 28, 0, + 0, 0); + GregorianCalendar resultat = JulianDay.addDays(valeur2, 1); + Assert.assertEquals(valeur.getTimeInMillis(), + resultat.getTimeInMillis()); + } + + /** + * Unit Tes from a Gregorian value + *
333 1 27 12 0 0 julian day value expected 1842713.0 + *
-584 5 28 0 0 0 julian day value expected 1507899.5 + *
1957 10 4 19 26, julian day value expected 24 2436116.31 + */ + public void testconvertToGregorianCalendar() { + GregorianCalendar valeur = new GregorianCalendar(1957, GregorianCalendar.OCTOBER, 4, + 19, 26, 24); + GregorianCalendar resultat = JulianDay.convertToGregorianCalendar(2436116.31); + Assert.assertEquals(valeur.getTimeInMillis(), + resultat.getTimeInMillis()); + + GregorianCalendar valeur1 = new GregorianCalendar(333,GregorianCalendar.JANUARY, 27, 12, + 0, 0); + GregorianCalendar resultat1 = JulianDay.convertToGregorianCalendar(1842713.0); + Assert.assertEquals(valeur1.getTimeInMillis(), + resultat1.getTimeInMillis()); + + GregorianCalendar valeur2 = new GregorianCalendar(-584, GregorianCalendar.MAY, 28, 0, + 0, 0); + GregorianCalendar resultat2 = JulianDay.convertToGregorianCalendar(1507899.5); + Assert.assertEquals(valeur2.getTimeInMillis(), + resultat2.getTimeInMillis()); + } + + /** + * unit test for + */ + public void testdiffdate() { + GregorianCalendar J1 = new GregorianCalendar(1835, 11, 16, 0, 0, 0); + GregorianCalendar J2 = new GregorianCalendar(1910, MONTH4, 20, 0, + 0, 0); + + Assert.assertEquals(27183, JulianDay.diffdate(J2, J1), 0); + + // new test for bug ? + //Le problème rencontré est que lorsque j'essais de soustraire 1940-02-29 et 1940-01-01 j'ai comme résultat 57 alors que je m'attends à avoir 59. + J1 = new GregorianCalendar(1940, GregorianCalendar.FEBRUARY, 29, 0, 0, 0); + J2 = new GregorianCalendar(1940, GregorianCalendar.JANUARY, 1, 0, 0, 0); + + Assert.assertEquals(59, JulianDay.diffdate(J1, J2), 0); + } + + /** + * DOCUMENT ME! + */ + public final void testconvertToJulianDay2000() { + // 19 april 1990, at 0:00 UT + Assert.assertEquals(-JULIANDAY1941990, + JulianDay.convertToJulianDay2000(YEAR1990, MONTH4, DAY19, 0, + 0, 0), 0); + } +} -- GitLab