[Java] Countdown, Systemzeit ausgeben

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von unix, 4. Dezember 2008 .

  1. 4. Dezember 2008
    Countdown, Systemzeit ausgeben

    hey,

    Also hab ein neues kleines Projekt in Java angefangen.
    hab vorher nur Applets gecodet und jetzt trau ich mich an eine ausführbare Anwendung!

    Will nen Countdown der die zeit zurückzählt (nur die Stunden) bis Silvester!

    Also 00:00:00 - Aktuelle Systemzeit!

    Da ich ja von Null anfange besonders bei diesem Gebiet Systemzeit etc., hab ich auch klein angefangen ^^

    Hab jetzt nen Textfeld in dem die aktuelle Uhrzeit ausgegeben wird.

    Die aktualisiert sich aber nich, hab deswegen ne Schleife eingebaut, die die Methode zum aktualisieren immer aufruft, aber die Schleife verursacht volle Prozessorauslastung.

    Und ich brauch deswegen so ne Endlosschleife vllt., damit die Uhr immer aktualisiert wird!

    Also die ersten Probleme, ne Endlosschleife und die Prozessorauslastung runterkriegen ^^

    Danach gehen wir mal weiter ^^

    THX

    mfg
     
  2. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    lol..

    hast zwar recht, aber geht auch netter

    vllt. sogar mit nem Link

    MfG
     
  3. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Hast ja recht ^^ Das war eine didaktische Maßnahme, um die Eigeninitiative des Threaderstellers zu fördern xD
    Nee eigentlich war ich nur faul ^^

    Gruß,
    Figger
     
  4. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    ich hab genug eigeninitiative ^^

    Also habs jetzt soweit hingekriegt, das die Uhr mit Threads läuft und das auch unendlich

    hier mal der vorläufige code:

    Code:
    import javax.swing.*;
    import java.awt.*;
    import java.text.DateFormat;
    import java.util.Date;
     
    public class Countdown extends Thread{
     public static void main(String[] args){
     new Countdown().OpenFrame();
     }
     
     JTextField Count;
     int a=1;
     int i;
     JFrame mFrame;
     //JPanel nPanel, mPanel;
     Thread th1;
     public void holezeit(){
     String uhrzeit = DateFormat.getTimeInstance(DateFormat.LONG).format(new Date());
     Count.setText (uhrzeit); //Uhrzeit wird in Textfeld geschrieben
     try {
     th1.sleep(1000); //Methode schläft für 1000 Millisekunden
     } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();}
     }
     public void OpenFrame(){
     mFrame=new JFrame("Uhrzeit");
     mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     Count=new JTextField(12);
     mFrame.setLayout(new GridLayout(1, 1));
     mFrame.add(Count);
     mFrame.setSize(300,120);
     mFrame.setVisible(true);
    
     for(;true; ){
     holezeit(); // Endlosschleife
     }
     }}

    So wie krieg ich jetzt einen Countdown zu einer bestimmten Zeit her?

    Ich müsste ja vorher einstellen das es genau 00:00:00 Uhr sein sollte bsp.

    Und dann

    Count.setText(time - uhrzeit); //time = 00:00:00 - der aktuellen zeit

    Aber das will er nich annehmen ^^

    Vllt. gibts da ne eigene Methode Zeiten von einander abzuziehen?

    und noch ne kleine Frage,
    Bei Netscape hab ich gesehen, dass es da eine Art Designstudio gibt, mit dem man locker das Design, halt die gui, machen kann und man muss keine objekte erstellen und dann noch vllt. mit set.Bounds(); platzieren ^^ das geht alles über die Oberfläche, sah so aus wie Paint^^

    Man konnte Buttons hinzufügen etc und die sind dann auch im code entstanden.

    Gibts sowas auch in eclipse? ^^

    Ich weiß bin halt faul ^^

    Aber hatte nen Bietemaker da hab ich etliche Objekte mit set.Bounds in die richtige Position gebracht xD
    das war ne scheiß arbeit!!!
     
  5. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    System.currentTimeMillis()

    Das musst du dann nur noch mit dem entsprechenden Wert von 1.1.2009 0:00h vergleichen bzw subtrahieren.
     
  6. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    wenn ich die Zeit in Millisekunden in nen String abspeichern will kommt der Fehler:

    The method setText(String) in the type JTextComponent is not applicable for the arguments (long)

    Wollts so machen:

    String uhrzeit = System.currentTimeMillis();
     
  7. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Du versuchst einer String Variable einen Long-Wert zuzuweisen. Du musst die Variable Uhrzeit auch als Long deklarieren.

    Für näheres kannste dir ja mal das hier druchlesen: Tutorial / Java Grundlagen / Datentypen

    //Edit: Wenn du es als String ausgeben willst musst du den Long vorher wahrscheinlich noch mit Long.toString(uhrzeit) umwandeln.
     
  8. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    sowas vllt. ? ^^ funzt aber auch nich xD

    Code:
     long uhrzeit = System.currentTimeMillis();
     Long.toString(uhrzeit); 
     Count.setText(uhrzeit);
     
  9. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Kein Wunder, da Long.toString einen Wert zurückgibt, den du allerdings nirgends zuweist. So sollte es Funktionieren:

    Code:
    long uhrzeit = System.currentTimeMillis();
    String uhrzeitStr= Long.toString(uhrzeit); 
    Count.setText(uhrzeitStr);
    Oder, wenn du den String nur zur Ausgabe brauchst und damit nicht mehr weiterarbeiten Willst:
    Code:
    long uhrzeit = System.currentTimeMillis(); 
    Count.setText(Long.toString(uhrzeit));
     
  10. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    hhmm okay jetzt steht im textfeld der wert:
    1228422896984

    das ist anscheinend jetzt die aktuelle milli Sekunden Zeit ^^

    A) Kein Plan wie der des jetzt errechnet hat oder was die zahlen bedeuten xD
    B) Kein Plan wie ich die Millisekunden Anzahl vom gewünschten zeitpunkt heraus kriege!
    C) wie soll man die dann von einander abziehen? einfach String A- String B?

    Könnte man nich einfach jede Zahl vom Datum einzeln nehmen und die dann voneinander abziehen und des dann ausgeben?
     
  11. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Code:
    /*@author GmbH */
    public class TimeTest {
    
     public static void main(String[] args) {
     
     Date d = new Date(System.currentTimeMillis());
     DateFormat df = SimpleDateFormat.getTimeInstance(DateFormat.MEDIUM);
     //TODO Hier d.getMinute oder whatever du haben willst & deine Verarbeitung 
     }
     
     private static void delay(int delayStamp){
     try {Thread.sleep(delayStamp);} catch (InterruptedException e) { e.printStackTrace(); }
     }
     
     
    }
    habs mal schnell ausprobiert, so kannstes gut verarbeiten


    gmbh
     
  12. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Code:
    86400 - ((datum.Substring(0, 2) * 3600) + (datum.Substring(3, 2) * 60) + datum.Substring(6, 2))
    also in VB.NET würde das so gehn ... zeigt dir halt die Sekunden bis zum nächsten tag an
     
  13. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Also hab jetzt die aktuelle Systemzeit (22:45:20) in 3 Strings aufgeteilt jeweil Stunde Minute und Sekunde.

    Dann teile ich die finale Uhrzeit auch in 3 Strings jeweils Stunde Minute und Sekunde.

    Dann müsste ich doch eig. die einzelnen Strings voneinander subtrahieren können?


    String ergebnis1 = ((Stunde- hour) -"1");

    -1 weil wenn man 23-22 macht hat man ja ne 1, aber sind vllt. noch 40 Minuten. deswegen gehts so weg

    Wie könnte man jetzt die 2 Strings voneinander subtrahieren?
     
  14. 4. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    achja und wie willst du 24 uhr dann abziehen? der zeiger zeigt 0 uhr an
    vor allem hast du davon doch dann gar keine sekunden -> dann sieht das bei dir so aus:
    3:15:30 Sekunden und nicht 54030 Sekunden
     
  15. 5. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Ja das ha ich jetzt auch gemerkt^^

    verdammt ^^

    Boah wieso gibts da keine fertige Methode für diesen scheiß countdown xD ^^
     
  16. 5. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    PHP:
    86400  - (( datum . Substring ( 0 2 ) *  3600 ) + ( datum . Substring ( 3 2 ) *  60 ) +  datum . Substring ( 6 2 ))
    verstehe nicht wieso du nicht diese Funktion von mir nimmst... musst nur datum als die zeit deklarieren und dann jeweils die gleiche Rechenoperation verwenden.
     
  17. 5. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    hhmm okay habs dann jetzt so:

    Code:
     String uhrzeit = DateFormat.getTimeInstance(DateFormat.MEDIUM).format(new Date());
     String hour = ( uhrzeit.substring( 0, 2 ) );
     String minutes = ( uhrzeit.substring( 3, 5 ) );
     String seconds = ( uhrzeit.substring( 6, 8 ) );
    
     d=Double.valueOf(hour).doubleValue();
     e=Double.valueOf(minutes).doubleValue();
     f=Double.valueOf(seconds).doubleValue();
    
     Count.setText(86400 - (d * 3600 + e * 60 + f) );
    Zuerst die Werte als double speichern und mit denen dann rechnen und dann sollte der des im Textfeld Count ausgeben!

    Fehler:
    The method setText(String) in the type JTextComponent is not applicable for the arguments (double)

    xD

    Muss ich die jetzt wieder umformatieren von double in nen normalen string?
    Wie könnt man des machen?
     
  18. 5. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Warum machst dus dir so kompliziert?
    Und warum zur Hölle willst du dauernd mit Strings rechnen? Du solltest dir das Kapitel Datentypen nochmal gründlich durchlesen.
    currentTimeMillis() gibt dir die Anzahl an Millisekunden zurück die seit dem 1.1.1970 vergangen sind. Hab dir den Code mal hingeklatscht. der rechnet dir die Tage, stunden, minuten bis sylvester dieses jahr aus.

    Code:
    java.util.Date sylvester2009= new java.util.Date(109,0,1,0,0); //hier legen wir den Tag fest zu dem wir die differenz bestimmen wollen(109=jahre seit 1900, steht für 2009; 0=monat(0-11);1=tag; 0=stunden; 0=minuten)
    long curTime=System.currentTimeMillis()+3600000; //wir holen uns den long für die aktuelle zeit(+3600000 um das ganze an unsere Zeitzone anzupassen)
    long diff=sylvester2009.getTime()-curTime; //rechnen die differenz zwischen den beiden zeitpunkten aus
    //rechnen das ganze in tage, studnen und minuten um( das spielchen kannst du natürlich auch bis auf die millisekunde weitertreiben)
    long day = diff/86400000;
    long hour = (diff % 86400000)/3600000;
    long min = (diff % 3600000)/60000;
    //...und die Ausgabe
    System.out.printf("Noch %d Tage, %d Stunden und %d Minuten",day,hour,min);
    //edit: die ausgabe ist natürlich für die console, wenn dus auffer gui ausgeben willst musste es halt dementsprechend umändern.
     
  19. 6. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    kay,

    aber wie krieg ich des jetzt in so ein Textfeld rein?

    weil setText geht ja nich weil

    The method setText(String) in the type JTextComponent is not applicable for the arguments (String, long, long, long)

    Und wie könnte man dann die Schriftart, Farbe und Größe von der Ausgabe ändern? weil es ist ja kein String mehr xD

    // Edit:

    habs jetzt hingekriegt

    Code:
    public void holezeit(){
     java.util.Date sylvester2009= new java.util.Date(109,0,1,0,0); //hier legen wir den Tag fest zu dem wir die differenz bestimmen wollen(109=jahre seit 1900, steht für 2009; 0=monat(0-11);1=tag; 0=stunden; 0=minuten)
     long curTime=System.currentTimeMillis()+3600000; //wir holen uns den long für die aktuelle zeit(+3600000 um das ganze an unsere Zeitzone anzupassen)
     long diff=sylvester2009.getTime()-curTime; //rechnen die differenz zwischen den beiden zeitpunkten aus
     //rechnen das ganze in tage, studnen und minuten um( das spielchen kannst du natürlich auch bis auf die millisekunde weitertreiben)
     long day = diff/86400000;
     long hour = (diff % 86400000)/3600000;
     long min = (diff % 3600000)/60000;
     long sec = (diff % 60000)/1000;
     //...und die Ausgabe
     System.out.printf("Noch %d Tage, %d Stunden und %d Minuten und %d Sekunden",day,hour,min,sec);
     
     String hourleft = new String (Long.toString(hour));
     String minutesleft = new String (Long.toString(min));
     String secondsleft = new String (Long.toString(sec));
     Count.setForeground (Color.green);
     Count.setBackground (Color.black);
     Count.setFont(new Font("Verdana", Font.PLAIN, 100));
     Count.setHorizontalAlignment(JTextField.CENTER);
     Count.setText( hourleft + ":" + minutesleft + ":" + secondsleft ); //Uhrzeit wird in Textfeld geschrieben
    
     try {
     Thread.sleep(1000); //Methode schläft für 1000 Millisekunden
     } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();}
     }
    
    Hab jetzt aber ein neues prob.

    if (Count.getText().equals("0:0:0")){
    finish();}

    Also wenn es dann Silvester ist und die Anzeige bei 0:0:0 ist, soll die Methode finish() aufgerufen werden!!

    In der steht drinn:

    Code:
     public void finish(){
     Count.setText ("HAPPY NEW YEAR");
     Count.setForeground (Color.white);
     Count.setBackground (Color.black);
     Count.setForeground (Color.black);
     Count.setBackground (Color.white);
     
     try {
     Thread.sleep(1000); //Methode schläft für 1000 Millisekunden
     } catch (InterruptedException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();}
     }
    
    Aber die Methode holezeit() in der er die Zeit holt und die Differenz anzeigt läuft ja weiter und deswegen gehts nach 0:0:0 mit 0:0:-1 etc weiter.

    Wie kann ich den beiden Methoden jeweils nen anderen Thread zu ordnen und die dann beenden.

    Und jetzt kommt noch ein Prob. ^^

    Wollt jetzt bizzl mehr Style reinbringen, und ne Einstellung zu dem Datum bei
    java.util.Date sylvester2009= new java.util.Date(c,b,a,d,e);

    Mit
    Code:
     JTextField Tag =new JTextField("Tag",4);
     JTextField Monat =new JTextField("Monat",2);
     JTextField Jahr =new JTextField("Jahr",2);
     JTextField Stunde =new JTextField("Stunde",2);
     JTextField Minute =new JTextField("Minute",2);
    
    int a = Integer.parseInt(Tag.getText());
    int b = (Integer.parseInt(Monat.getText()))-1;
    int c = (Integer.parseInt(Jahr.getText()))-1900;
    int d = Integer.parseInt(Stunde.getText());
    int e = Integer.parseInt(Minute.getText());
    holt er sich die integer Werte aus den Textfeldern in die ich mein gewünschtes Datum reinschreibe und dann schreibt er die Int automatisch in die Methode rein!

    Es müsste theoretisch gehen, eclipse meldet keine Fehler. Aber das Prog. startet nich weil:

    Exception in thread "main" java.lang.NumberFormatException: For input string: "Tag"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at Countdown.<init>(Countdown.java:24)
    at Countdown.main(Countdown.java:8)

    Weil in den Textfeldern in die eig. ne INT Wert reinkommt ein text steht, aber wenn ich da von anfang an ein Datum einsetze, startet das Prog. hängt sich auf aber läuft im Hintergrund weiter.

    Hat einer ne Idee wie des gehen wüde?

    weil ich hab ja anfangs nur die Textfelder zum Datum einstellen und einen Start Button, der die mEthode dann ausführt die den Countdown startet!
    Code:
     if(s.equals("START")){
     mFrame.setLayout(new GridLayout(1, 1));
     mFrame.add(Count);
     mFrame.setExtendedState(Frame.MAXIMIZED_BOTH);
     Tag.setVisible(false);
     Monat.setVisible(false);
     Jahr.setVisible(false);
     Stunde.setVisible(false);
     Minute.setVisible(false);
     start.setVisible(false);
     Count.setVisible(true);
     
    
     for(;true; ){
     holezeit(); // Endlosschleife
     }}
     
  20. 7. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Hi Figger, leider ist der Date Konstruktor Deprecated!

    Ich hab mich selber mit einen ähnlichen Thema in Java beschäftigt und habe festgestellt, dass es dort keine wirklich einfache Lösung gibt!
    Wenn man es genau machen will muss man wohl die Klasse GregorianCalendar nehmen.
    Dazu hab ich mal ein paar Links rausgesucht:
    Als erstes natürlich zur API:

    GregorianCalendar (Java Platform SE 6)


    Dann eine englische Einführung die es allerdings nicht allzu exakt nimmt:
    Working in Java time | JavaWorld
     
  21. 7. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    hhmm funzt bei mir trotzdem super ^^


    Nur noch halt die anderen Probs.
    Das ich jeder Methode einen Thread zu weise um die dann zu beenden und das mit der Einstellung.
    Das man in die Textfelder reinschreiben kann, bis zu welchem Datum der zählen soll!
     
  22. 7. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Die machen solche methoden nicht umsonst deprecated.
     
  23. 7. Dezember 2008
    AW: Countdown, Systemzeit ausgeben

    Aber das mitm Georgian Calender da sind auch manche methoden deprecated
    Code:
     String[] ids = TimeZone.getAvailableIDs(1 * 60 * 60 * 1000);
     SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
    Bei denen sagt ers.
    Halt mein eclipse ^^
     
  24. 8. Dezember 2008
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Countdown, Systemzeit ausgeben

    hhmm mach des jetzt halt mit java.util.Date.

    Wollt jetzt nochmal bizzl pimpen das ding und jetzt schmeißt der mir genug Fehler raus xD

    Hab mal hier meinen quellcode geuppt, vllt. guckt sich einer mal an wieso mein eclipse die Fehler hier bringt:

    Code:
    Exception in thread "main" java.lang.NumberFormatException: For input string: "Tag"
     at java.lang.NumberFormatException.forInputString(Unknown Source)
     at java.lang.Integer.parseInt(Unknown Source)
     at java.lang.Integer.parseInt(Unknown Source)
     at Countdown.<init>(Countdown.java:26)
     at Countdown.main(Countdown.java:10)
    
    No File | xup.in
     
  25. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.