# uhrzeit programmieren



## Jüngling (28. Mai 2009)

Hallo erstmal,

ich bin neu hier und wollte mich nur schon mal entschuldigen wenn ich im falschen forum das poste 

Ich bin 16 Jahre alt und wollt heute morgen eig. nur was "kleines" (für meine verhältnisse) programmieren und habe des befehl system.currentTimeMillis(); entdeckt und dachte spontan ich mache einen kalender

also ich bin gerade erst an den berechnungen...eine grafische obefläche kommt später(und repaint() wird auch noch rausgeschmissen)
ich weiß die methoden bestMonat und bestTage gehen von einem Nichtschaltjahr aus....
Aber mein prob ist das ich überall ich richtigen werte habe außer bei den stunden....wäre  cool wenn von euch jmd schauen könnte wo ich den fehler habe....und ich kann mir schon gut vorstellen das ich etwas umständlich programmiert habe, da ich jedoch erst seit Sept. (in der schule) java(applets) lerne kenne ich warsch die meisten befehle nicht wirklich....fangt also bitte nicht an soviel zu schreiben dass ich meine heile welt ich frage stellen muss 


also hier der quell code:

```
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 28.05.2009
  * @Marius
  */

public class uhrZeit extends Applet {

  private long jahr,mon,day,h,min,sec;
  private long ms ;
  
  
  


  public void init() {
  getMS();
  sec=ms/1000;
  min=ms/60000;
  h=ms/3600000;
  day=ms/3600000/24;
  jahr=(long)(ms/3600000/24/365.2425);
  }
  
  public void getMS(){
    ms = System.currentTimeMillis();
  }
  


  
  public void paint(Graphics g){
  
    getMS();
    long jJahr,jMonat,jDay,jH,jMin,jSec,restMs;

    String []monat={
      "Januar",
      "Februar",
      "März",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
      } ;

    jJahr=jahr+1970;
    restMs=ms-(long)(jahr*3600000*24*365.2425);
    jDay=restMs/3600000/24;
    restMs=ms-(day*3600000*24);
    jMonat=bestMonat(jDay);
    jDay=bestTage(jDay,jMonat);
    
    jH=restMs/3600000;
    restMs=ms-(h*3600000);
    jMin=restMs/60000;
    restMs=ms-(min*60000);
    jSec=restMs/1000;
    if(jSec>=60){
      jSec=jSec-60;
    }

    
  
    g.drawString("Bisher vergangene Sekunden: "+sec,20,60);
    g.drawString("Bisher vergangene Minuten: "+min,20,80);
    g.drawString("Bisher vergangene Stunden: "+h,20,100);
    g.drawString("Bisher vergangene Tage: "+day,20,120);
    g.drawString("Bisher vergangene Jahre: "+jahr,20,140);

    g.drawString(" Sekunden: "+jSec,280,60);
    g.drawString(" Minuten: "+jMin,280,80);
    g.drawString(" Stunden: "+jH,280,100);
    g.drawString(" Tage: "+jDay,280,120);
    g.drawString(" Monat: "+monat[(int)(jMonat)],280,140);
    g.drawString(" Jahre: "+jJahr,280,160);
    
    repaint();

    }
    
    public int bestMonat(long jDay){
       short m;
       jDay=jDay-31;
       if(jDay<=0){
         m=0;
       }
       else{
         jDay=jDay-28;
         if(jDay<=0){
           m=1;
         }
         else{
           jDay=jDay-31;
           if(jDay<=0){
             m=2;
           }
           else{
             jDay=jDay-30;
             if(jDay<=0){
               m=3;
             }
             else{
               jDay=jDay-31;
               if(jDay<=0){
                 m=4;
               }
               else{
                jDay=jDay-30;
                if(jDay<=0){
                  m=5;
                }
                else{
                 jDay=jDay-31;
                 if(jDay<=0){
                   m=6;
                 }
                 else{
                   jDay=jDay-31;
                   if(jDay<=0){
                     m=7;
                   }
                   else{
                    jDay=jDay-30;
                    if(jDay<=0){
                      m=8;
                    }
                    else{
                      jDay=jDay-31;
                      if(jDay<=0){
                        m=9;
                      }
                      else{
                        jDay=jDay-30;
                        if(jDay<=0){
                          m=10;
                        }
                        else{
                          m=11;
                        }
                      }
                    }
                   }
                 }
                }
               }
             }
           }
         }
       }
       return m;
    }
    
    public int bestTage(long jDay, long jMonat){
      switch((int)(jMonat)){
        case 0:

        break;

        case 1:
        jDay=jDay-31;
        break;

        case 2:
        jDay=jDay-31-28;
        break;

        case 3:
        jDay=jDay-31-28-31;
        break;

        case 4:
        jDay=jDay-31-28-31-30;
        break;

        case 5:
        jDay=jDay-31-28-31-30-31;
        break;

        case 6:
        jDay=jDay-31-28-31-30-31-30;
        break;

        case 7:
        jDay=jDay-31-28-31-30-31-30-31;
        break;

        case 8:
        jDay=jDay-31-28-31-30-31-30-31-31;
        break;

        case 9:
        jDay=jDay-31-28-31-30-31-30-31-31-30;
        break;

        case 10:
        jDay=jDay-31-28-31-30-31-30-31-31-30-31;
        break;

        case 11:
        jDay=jDay-31-28-31-30-31-30-31-31-30-31-30;
        break;

      }
      return (int)(jDay);
    }





}
```


----------



## Landei (28. Mai 2009)

Sehr hübsch, vor allem die elegant geschachtelten if-Abfragen und so, aber warum nimmst du nicht einfach java.util.Date oder noch besser java.util.Calendar wie jeder vernünftige Mensch?


----------



## SlaterB (28. Mai 2009)

weil ein Kalender eine überschaubare Aufgabe ist, die man zur Übung selber implementieren kann, 
ist doch einfach..

ich spreche mich hier wie immer gegen Wiederholung aus,
die Anzahl Tage pro Monat sollte höchstens genau einmal in einem Array definiert sein oder als 12 statische Konstanten oder so,

-----

in bestMonat() gehts du schrittweise vor, erst werden 31 abgezogen, dann 28 usw.,
(mit return in jedem if ließen sich die vielen else übrigens vermeiden)

in bestTage() könntest du das ähnlich machen,

31 abziehen
if (monat == 1) {
return
}
28 abziehen
if (monat == 2) {
return
}
...
if ..
...
if ..
...
if ..

dann würde jede Zahl nur einmal auftauchen, nicht die 31 für den Januar gleich 12x,
der Code wäre dann aber länger, Geschmackssache,

bei einem Array und einer Schleife ließe sich das recht kurz machen:
for (i i bis monat) {
monat_ abziehen
}_


----------



## Jüngling (28. Mai 2009)

danke für eure antworten.....naja  @ Landei naja ehrlich gesagt wenn ich von dieser Funktion gewußt hätte hätte ich dieses prob nicht
Aber dann würde ich dieses Applet ja auch nciht schreibe

ich habe gerade keine zeit schaue aber morgen mal durch eure vorschläg und überarbeite das prog mal und melde mcih dann


----------



## Wadda (30. Okt 2009)

hab ich grad gebastelt

<p style="text-align: center;"><script>
var clockid=new Array()
var clockidoutside=new Array()
var i_clock=-1
var thistime= new Date()
var hours=thistime.getHours()
var minutes=thistime.getMinutes()
var seconds=thistime.getSeconds()
if (eval(hours) <10) {hours="0"+hours}
if (eval(minutes) < 10) {minutes="0"+minutes}
if (seconds < 10) {seconds="0"+seconds}
var thistime = hours+":"+minutes+":"+seconds

function writeclock() {
  i_clock++
  if (document.all || document.getElementById || document.layers) {
    clockid[i_clock]="clock"+i_clock
    document.write("<font family=arial size=2><span id='"+clockid[i_clock]+"' style='position:relative'>"+thistime+"</span></font>")
  }
}

function clockon() {
  thistime= new Date()
  hours=thistime.getHours()
  minutes=thistime.getMinutes()
  seconds=thistime.getSeconds()
  if (eval(hours) <10) {hours="0"+hours}
  if (eval(minutes) < 10) {minutes="0"+minutes}
  if (seconds < 10) {seconds="0"+seconds}
  thistime = hours+":"+minutes+":"+seconds

  if (document.all) {
    for (i=0;i<=clockid.length-1;i++) {
      var thisclock=eval(clockid_)
      thisclock.innerHTML=thistime
    }
  }

  if (document.getElementById) {
    for (i=0;i<=clockid.length-1;i++) {
      document.getElementById(clockid).innerHTML=thistime
    }
  }
  var timer=setTimeout("clockon()",1000)
}
window.onload=clockon
</script> <script>writeclock()</script> Uhr</p>


und?_


----------



## ARadauer (30. Okt 2009)

und? Frag ich mich auch.
1. JavaScript ist nicht Java
2. Warum schreibst du dein Program in einen fremden Thread?


----------

