# Berechnung von Sonnenauf und Sonnenuntergang



## delphiking1980 (24. Jun 2012)

Hallo,

ich habe da mal probiert den Sonnenauf/untergang zu berechnen da es ja im Internet viele gute Seiten zu diesem Thema gibt bin ich auch schnell zu einem JavaScript gekommen welches ich nach Java Portieren wollte nur irgendwie stimmen die Berechnungen nicht mehr ich schätze mal auch ein Rundungsfehler welcher mir ein paar Minuten klaut.

Mein Quellcode :


```
public class SunRiseSet {

    private double pi = Math.PI;
    private double rad = pi / 180.0;
    private double h = -(50.0 / 60.0) * rad;
    private double breite = 47.5;
    private double b = breite * rad;
    private double laenge = 8.5;
    private int zeitzone = 2;
    private int tag;

    private String aufgangStr;
    private String untergangStr;

    public SunRiseSet(double breite, double laenge, int tag, int zeitzone) {
        this.breite = breite;
        this.laenge = laenge;
        this.zeitzone = zeitzone;
        this.tag = tag;
        init();
    }

    private void init() {
        double aufgang = aufgang1(this.tag);
        double untergang = untergang1(this.tag);

        aufgang = aufgang - laenge / 15.0 + zeitzone;
        untergang = untergang - laenge / 15.0 + zeitzone;

        int aufgangh = (int) Math.floor(aufgang);
        String aufgangH = ((aufgangh < 10) ? "0" + String.valueOf(aufgangh) : String.valueOf(aufgangh));
        int aufgangm = (int) Math.floor(((aufgang - aufgangh) * 100) * 3 / 5);
        String aufgangM = ((aufgangm < 10) ? "0" + String.valueOf(aufgangm) : String.valueOf(aufgangm));
        int aufgangs = (int) Math.floor(((((((aufgang - aufgangh) * 100) * 3 / 5) - aufgangm) * 100) * 3 / 5));
        String aufgangS =((aufgangs < 10) ? "0" + String.valueOf(aufgangs) : String.valueOf(aufgangs));
        this.aufgangStr = aufgangH + ":" + aufgangM + ":" + aufgangS;

        int untergangh = (int) Math.floor(untergang);
        String untergangH = ((untergangh < 10) ? "0" + String.valueOf(untergangh) : String.valueOf(untergangh));
        int untergangm = (int) Math.floor(((untergang - untergangh) * 100) * 3 / 5);
        String untergangM = ((untergangm < 10) ? "0" + String.valueOf(untergangm) : String.valueOf(untergangm));
        int untergangs = (int) Math.floor(((((((untergang - untergangh) * 100) * 3 / 5) - untergangm) * 100) * 3 / 5));
        String untergangS = ((untergangs < 10) ? "0" + String.valueOf(untergangs) : String.valueOf(untergangs));
        this.untergangStr = untergangH + ":" + untergangM + ":" + untergangS;

    }

    private double sonnendeklination(double t) {
        return 0.40954 * Math.sin(0.0172 * (t - 79.35));
    }

    private double zeitdifferenz(double deklination) {
        return 12.0 * Math.acos((Math.sin(h) - Math.sin(b) * Math.sin(deklination)) / (Math.cos(b) * Math.cos(deklination))) / pi;
    }

    private double zeitgleichung(double t) {
        return -0.1752 * Math.sin(0.033430 * t + 0.5474) - 0.1340 * Math.sin(0.018234 * t - 0.1939);
    }

    private double aufgang1(double t) {
        double deklination = sonnendeklination(t);
        return 12 - zeitdifferenz(deklination) - zeitgleichung(t);
    }

    private double untergang1(double t) {
        double deklination = sonnendeklination(t);
        return 12 + zeitdifferenz(deklination) - zeitgleichung(t);
    }

    public String getAufgangStr() {
        return aufgangStr;
    }

    public String getUntergangStr() {
        return untergangStr;
    }

    public static void main(String... args) {
        SunRiseSet sun = new SunRiseSet(52,9, 176, 2);

        System.out.println("Sonnenaufgang : " + sun.getAufgangStr());
        System.out.println("Sonnenuntergang : " + sun.getUntergangStr());
    }
}
```

und hier das Java-Script


```
</script>

<script type="text/javascript">
pi       = Math.PI;
RAD      = pi/180.0;
h        = -(50.0/60.0)*RAD;
Breite   = 47.5;
B        = Breite*RAD;
Laenge   = 8.5;
Zeitzone = 1.0;

function sqr(x)
  {
  return x*x;
  }

function sonnendeklination(T)
  {
  return 0.40954*Math.sin(0.0172*(T-79.35));
  }

function zeitdifferenz(Deklination)
  {
  return 12.0*Math.acos((Math.sin(h) - Math.sin(B)*Math.sin(Deklination)) / (Math.cos(B)*Math.cos(Deklination)))/pi;
  }

function zeitgleichung(T)
  {
  return -0.1752*Math.sin(0.033430 * T + 0.5474) - 0.1340*Math.sin(0.018234*T - 0.1939);
  }

function aufgang1(T)
  {
  DK = sonnendeklination(T);
  return 12 - zeitdifferenz(DK) - zeitgleichung(T);
  }

function untergang1(T)
  {
  DK = sonnendeklination(T);
  return 12 + zeitdifferenz(DK) - zeitgleichung(T);
  }

function compute(Form)
  {
  Laenge     = eval(Form.Laenge.value);
  Breite     = eval(Form.Breite.value);
  Zone       = eval(Form.Zone.value);
  T          = eval(Form.T.value);
  B          = Breite*RAD;
  Aufgang    = aufgang1(T);
  Untergang  = untergang1(T);

  Aufgang    = Aufgang   - Laenge /15.0 + Zone;
  Untergang  = Untergang - Laenge /15.0 + Zone;

  Aufgangh = Math.floor(Aufgang);
  AufgangH = (Aufgangh < 10) ? "0"+Aufgangh : Aufgangh;
  Aufgangm = Math.floor(((Aufgang-Aufgangh)*100)*3/5);
  AufgangM = (Aufgangm < 10) ? "0"+Aufgangm : Aufgangm;
  Aufgangs = Math.floor(((((((Aufgang-Aufgangh)*100)*3/5)-Aufgangm)*100)*3/5));
  AufgangS = (Aufgangs < 10) ? "0"+Aufgangs : Aufgangs;
  Aufgang  = AufgangH+":"+AufgangM+":"+AufgangS;

  Untergangh = Math.floor(Untergang);
  UntergangH = (Untergangh < 10) ? "0"+Untergangh : Untergangh;
  Untergangm = Math.floor(((Untergang-Untergangh)*100)*3/5);

  UntergangM = (Untergangm < 10) ? "0"+Untergangm : Untergangm;
  Untergangs = Math.floor(((((((Untergang-Untergangh)*100)*3/5)-Untergangm)*100)*3/5));
  UntergangS = (Untergangs < 10) ? "0"+Untergangs : Untergangs;
  Untergang  = UntergangH+":"+UntergangM+":"+UntergangS;

  Form.Aufgang.value   = Aufgang;
  Form.Untergang.value = Untergang;
  Form.Zeitgleichung.value = 60.0*zeitgleichung(T);
  Form.Deklination.value = sonnendeklination(T)/RAD;
  }

function sinit()
  {
  with(document.Sunrise)
  {
  Laenge.value        = "11.02";
  Breite.value        = "49.6";
  Zone.value          = "1";
  T.value             = "80";
/*
  form.Aufgang.value       = "0";
  form.Untergang.value     = "0";
  form.Zeitgleichung.value = "0";
  form.Deklination.value   = "0";
*/
  }
  }
</script>
```

Vieleicht findet ja einer von euch den Fehler


----------



## delphiking1980 (24. Jun 2012)

Wenn ich jetzt die Koordinaten von dem ersteller des Javascriptes nehme dann stimmen die Berechnungen. Nur mit den Koordinaten zu meiner Heimat stellt er sich querr.;(


----------



## delphiking1980 (24. Jun 2012)

man sollte nicht so etwas tun und dann im Konstruktor die Membervariable neubefüllen......


```
private double breite = 47.5;
    private double b = breite * rad;
```


----------

