Newsgroup: it.comp.programmare.win32
Titolo: Routine di calcolo dei giorni Giuliani

Ho necessità di conoscere il procedimento per il calcolo del Giorno Giuliano
a partire dalla data in formato GGMMAAAA e viceversa. Mi serve anche sapere
come ricavare il giorno della settimana (Lunedì, Martedì ecc.) partendo dal
Giorno Giuliano.
Un grazie a chi mi aiuterà ...

Giorno Giuliano.
Io ho scritto la segiente classe in Java. Se ti puo' servire, usala quanto e
come vuoi...
// Julian
package it.east.science.astro;
/**
  Giorno giuliano: &egrave; il tipo di data utilizzata nei calcoli
astronomici.
*/
public final class Julian extends java.lang.Number
{
  private double julian = 0.0;
  public final static double
  /**
    anno Besseliano 31/12/1949 ore 22:09:07,19s
  */
    B1950 = 2433282.42299999995,
  /**
    equinozio del 1 Gennaio 2000 ore 12:00:00
  */
    J2000 = 2451545.0;
  /**
    Crea un giorno giuliano a partire da una data civile Time
  */
  public Julian(Time t)
  {
    julian = valueOf(t.xdate(), t.xtime()).doubleValue();
  }
  /**
    Crea un giorno giuliano a partire da una data XDate e da un orario XTime
  */
  public Julian(XDate d, XTime t)
  {
    julian = valueOf(d, t).doubleValue();
  }
  /**
    Crea un giorno giuliano a partire da una data XDate assumendo come
orario
    il mezzogiorno del giorno indicato
  */
  public Julian(XDate d)
  {
    julian = valueOf(d, new XTime(12, 0, 0)).doubleValue();
  }
  public Julian(double jd)
  {
    julian = jd;
  }
  /**
    Confronta due giorni giuliani
  */
  public boolean equals(Julian j)
  {
    return (julian == j.doubleValue());
  }
  /**
    Verifica se un giorno giuliano &egrave; precedente a quello indicato
  */
  public boolean before(Julian j)
  {
    return (julian < j.doubleValue());
  }
  /**
    Verifica se un giorno giuliano &egrave; successivo a quello indicato
  */
  public boolean after(Julian j)
  {
    return (julian > j.doubleValue());
  }
  /**
    Trasforma da data civile a giorno giuliano
  */
  public static Julian valueOf(Time t)
  {
    return valueOf(t.xdate(), t.xtime());
  }
  /**
    Trasforma una data XDate e un orario XTime in un giorno giuliano
  */
  public static Julian valueOf(XDate d, XTime t)
  {
    long y, m, a, b, c, e;
    double jd;
    y = d.getYear();
    m = d.getMonth();
    if (m <= 2) {
      y--;
      m += 12;
    }
    b = 0;
    if (d.after(new XDate(15, 10, 1582))) { // data successiva alla riforma
gregoriana 15/10/1582
      a = XMath.pInt(y / 100);
      b = 2 - a + XMath.pInt(a / 4);
    }
    c = XMath.pInt(365.25 * y);
    e = XMath.pInt(30.6001 * (m + 1));
    jd = b + c + e + d.getDay() + 1720994.5;
    jd = XMath.pInt(jd * 10000.0) / 10000.0 + t.doubleValue() * 0.5 / 12.0;
    return new Julian(jd);
  }
  /**
    Trasforma da giorno giuliano a data civile
  */
  public Time dateValue()
  {
    long aa, c, d, e;
    int day, mon, year, hour, min, sec;
    double a, b, f, g, z;
    z = XMath.pInt(julian + 0.5);
    f = julian + 0.5 - z;
    if (z >= 2299161.0) {
      aa = XMath.pInt((z - 1867216.25) / 36524.25);
      a = z + 1 + aa - XMath.pInt(aa / 4);
    }
    else a = z;
    b = a + 1524;
    c = XMath.pInt((b - 122.1) / 365.25);
    d = XMath.pInt(365.25 * c);
    e = XMath.pInt((b - d) / 30.6001);
    g = b - d + f - XMath.pInt(e * 30.6001);
    day = (int)XMath.pInt(g * 10000) / 10000;
    mon = (int)( (e < 13.5) ? e - 1 : e - 13 );
    year = (int)( (mon > 2.5) ? c - 4716 : c - 4715 );
    return new Time(new XDate(day, mon, year), new XTime(f * 12 / 0.5));
  }
  /**
    Restituisce il valore intero del giorno giuliano effettuando un casting
    ad int
  */
  public int intValue()
  {
    return new Double(julian).intValue();
  }
  /**
    Restituisce il valore intero long del giorno giuliano
  */
  public long longValue()
  {
    return new Double(julian).longValue();
  }
  /**
    Restituisce il valore float del giorno giuliano effettuando un casting
    a float
  */
  public float floatValue()
  {
    return new Double(julian).floatValue();
  }
  /**
    Restituisce il valore double (valore corretto) del giorno giuliano
  */
  public double doubleValue()
  {
    return julian;
  }
  /**
    Restituisce il giorno giuliano sotto forma di stringa
  */
  public String toString()
  {
    String pint = new Long(XMath.fix(julian)).toString();
    String pdec;
    try {
      pdec = new Double(XMath.frac(julian)).toString().substring(2);
    } catch (StringIndexOutOfBoundsException e) {
      pdec = "0";
    }
    return (pint + "." + pdec);
  }
}
--
Byez
Stefano Tempesta
temp...@tin.it
http://tempesta.freeweb.org