Timer Format: 00:00:00

Renni

Mitglied
Hallo,
Ich wollte fragen, wie ich einen Timer mit dem oben genannten Format machen könnte, also hh:mm:ss. Ich weiß nicht, wie ich das machen soll... So: if (sekunden == 60)
oder alle einzeln laufen lassen... Ich würde mich sehr freuen, wenn mir da jemand helfen könnte.

Mfg
Christian
 

httpdigest

Top Contributor
Gibt ein paar Möglichkeiten. Eine z.B. so:
Java:
private static String toFormattedTime(long seconds) {
  return String.format("%02d:%02d:%02d",
      (seconds / 60 / 60) % 24,
      (seconds / 60) % 60,
       seconds % 60);
}
public static void main(String[] args) throws InterruptedException {
  long seconds = 0L;
  while (true) {
    System.out.println(toFormattedTime(seconds++));
    Thread.sleep(1000L);
  }
}
 

Renni

Mitglied
stimmt, das sieht schön aus, das werde ich so übernehmen und verstehen, denn es gilt ja, dass man verstehen und nicht übernehmen soll ;)
Danke!

Mfg
Christian
 

Thallius

Top Contributor
Gibt ein paar Möglichkeiten. Eine z.B. so:
Java:
private static String toFormattedTime(long seconds) {
  return String.format("%02d:%02d:%02d",
      (seconds / 60 / 60) % 24,
      (seconds / 60) % 60,
       seconds % 60);
}
public static void main(String[] args) throws InterruptedException {
  long seconds = 0L;
  while (true) {
    System.out.println(toFormattedTime(seconds++));
    Thread.sleep(1000L);
  }
}

dieser Timer ist aber nicht genau ;)
 

BlackBookOne

Mitglied
Mit DateFormat geht das recht einfach:
Java:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimeFormat1 {
    private static String getFormattedTime() {
        DateFormat df = new SimpleDateFormat("HH:mm:ss.SS");
        return df.format(new Date());
    }

    public static void main(String[] args) throws InterruptedException {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(getFormattedTime());
            }
        }, 0, 500);
        Thread.sleep(30_000);
        timer.cancel();
    }
}
 

BlackBookOne

Mitglied
holst du alle 500ms ein formatted date
Das ist ja nur ein Beispiel... :
Java:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimeFormat1 {
    private static final DateFormat MY_TIME_FORMATTER = new SimpleDateFormat("HH:mm:ss.SS");

    private static String getFormattedTime() {
        return MY_TIME_FORMATTER.format(new Date());
    }

    public static void main(String[] args) throws InterruptedException {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(getFormattedTime());
            }
        }, 0, 1_000);
        Thread.sleep(30_000);
        timer.cancel();
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Wieder mal so typisch. Für einen Timer der jede Sekunde anzeigen soll holst du alle 500ms ein formatted date.
Damit wolltest du natürlich darauf aufmerksam machen, dass @BlackBookOne die Anforderungen nicht richtig verstanden hat, und anstatt eines Timers immer die aktuelle Zeit anzeigt ;)


Als erfahrener Entwickler ist dir ja schließlich bewusst, dass die Variante mit Date (passend zur Fragestellung umgesetzt) schneller wäre, als die Variante mit String.format, und das ganze mit der neuen Time-API noch mal schneller laufen würde ;)
 

Renni

Mitglied
Also der oben genannte, ist mir genau genug. Hier geht es mir jetzt nicht um Millisekunden, wenn da eine Sekunde verzögerung ist, ist das schon ok, aber danke!
 

mrBrown

Super-Moderator
Mitarbeiter
nein, ich wollte ich nicht. Aber wenn du nicht verstehst was ich meine, dann bestätigt das eigentlich nur meine Meinung. Danke
Könntest deine Meinung auch einfach darlegen, sonst bleibt das wieder mal substanzloses meckern...

Offensichtlich siehst du ja irgendeinen Nachteil darin, ein Datum zu formatieren, anstatt mit Sekunden zu rechnen und String.format zu nehmen, sonst hättest du ja nicht die Lösung mit Date angemeckert, sondern die andere.

Der Gedanke, dass du dich dabei mal wieder fälschlicherweise an der "Performance" störst liegt einfach nahe, vor allem da du ja keinen anderen Grund nennen kannst – du meintest doch nicht wirklich nur die 500s als Intervall?

Vielleicht hast du ja valide Gründe, aber wenn du die nicht äußern kannst, ist das halt nicht mehr als dummes rumpöbeln 🤷‍♂️
 

Thallius

Top Contributor
Doch ich meine genau die 500ms. ich brauche kein Hintergrundwissen um zu sehen, dass diese Routine doppelt so viel Rechnerei benötigt wie eigentlich nötig. warum muss das also sein? Wenn jemand aus unwissenheit inperformant programmiert ist das eine Sache, wenn er es aber aus schlamperei heraus tut ärgert es mich.
 

mrBrown

Super-Moderator
Mitarbeiter
Doch ich meine genau die 500ms. ich brauche kein Hintergrundwissen um zu sehen, dass diese Routine doppelt so viel Rechnerei benötigt wie eigentlich nötig. warum muss das also sein? Wenn jemand aus unwissenheit inperformant programmiert ist das eine Sache, wenn er es aber aus schlamperei heraus tut ärgert es mich.
Dass das ein Beispiel ist, was eben nicht einen Timer in Sekunden-Abständen mit "HH:mm:ss", sondern die aktuelle Zeit in 500ms-Abständen mit "HH:mm:ss.SS" ausgibt, ist dir schon bewusst?
Der Code macht etwas völlig anderes, als das vom TO geforderte, eben weil es ein Beispiel ist, welches der TO dann nicht einfach ohne nachdenken übernehmen kann...
 

Thallius

Top Contributor
Dass das ein Beispiel ist, was eben die Zeit nicht in Sekunden-Abständen mit "HH:mm:ss", sondern in 500ms-Abständen mit "HH:mm:ss.SS" ausgibt, ist dir schon bewusst?
Der Code macht etwas völlig anderes, als das vom TO geforderte, eben weil es ein Beispiel ist, welches der TO dann nicht einfach ohne nachdenken übernehmen kann...
Ja und? Hat nix damit zu tun das wenn die Aufgabenstellung richtig gewesen wäre er immer noch 2x pro Sekunde eine Routine aufruft die nur einmal die Sekunde eine Änderung macht
 

mrBrown

Super-Moderator
Mitarbeiter
Ja und? Hat nix damit zu tun das wenn die Aufgabenstellung richtig gewesen wäre er immer noch 2x pro Sekunde eine Routine aufruft die nur einmal die Sekunde eine Änderung macht
Du meinst, wenn quasi alles an dem Code anders gemacht worden wäre, ständen trotzdem noch die 500ms dadrin?

Gut, das mag dir vielleicht so passieren, den meisten anderen traue ich aber auch zu, neben den anderen Stellen auch diese Stelle anzupassen ;)
 

Thallius

Top Contributor
Langsam werden deine persönlichen Angriffe etwas langweilig. Als Moderator sollte man sich besser im Griff haben. Sagt ja schon das Wort Moderator und nicht Agressor
 
K

kneitzel

Gast
@Thallius meint doch nur, dass es wenig optimal ist, wenn zwei mal in der Sekunde eine Instanz von SimpleDateFormat erzeugt wird.
Den Punkt kann ich durchaus nachvollziehen, wobei ich den auch nicht als zu kritisch ansehe. Aber ja: So Formate erstelle ich auch einmal und behalte sie dann für das nächste Mal einfach bei so die Formatierung nicht auf einer veränderlichen Quelle kommt.

Aber mir ist auch mehr die nicht erfüllten Anforderungen aufgefallen, und das "typisch" hätte fast eine Antwort getriggert, aber das habe ich dann nur Thallius im Gespräch aufgedrängt um eben eine unnötige Diskussion zu vermeiden... Und im Augenblick kann ich das hier auch nicht wirklich nachvollziehen, denn jeder von euch beiden hat einen validen Punkt die sich nicht widersprechen ...
 

mrBrown

Super-Moderator
Mitarbeiter
@Thallius meint doch nur, dass es wenig optimal ist, wenn zwei mal in der Sekunde eine Instanz von SimpleDateFormat erzeugt wird.
Das SimpleDateFormat wird nur ein einziges Mal erzeugt?

Nur das Date wird mehrmals erzeugt, aber da kommt man nicht wirklich drum rum, wenn man zweimal pro Sekunde die aktuelle Uhrzeit ausgeben will...
 
Zuletzt bearbeitet:

BlackBookOne

Mitglied
Es ist ein bisschen umständlich, weil die neue DateTime-API Scheiße ist, aber auch eine Zeitspanne zu formatieren ist möglich:
Java:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

public class TimeFormat1 {
    private static final DateFormat MY_TIME_FORMATTER = new SimpleDateFormat("HH:mm:ss.SS");

    private static Date start_date = null;

    private static void restart() {
        start_date = new Date();
    }

    private static String getFormattedDuration() {
        LocalDateTime midnight_time = LocalDateTime.of(LocalDate.now(), LocalTime.MIDNIGHT);
        LocalDateTime now_time = LocalDateTime.now();
        Date midnight_date = Date.from(midnight_time.atZone(ZoneId.systemDefault()).toInstant());
        Date now_date = Date.from(now_time.atZone(ZoneId.systemDefault()).toInstant());
        return MY_TIME_FORMATTER.format(new Date(now_date.getTime() - start_date.getTime() + midnight_date.getTime()));
    }

    public static void main(String[] args) throws InterruptedException {
        restart();
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(getFormattedDuration());
            }
        }, 0, 1_000);
        Thread.sleep(30_000);
        timer.cancel();
    }
}

Soll die Stoppuhr eigentlich länger als 24h laufen?
 

mihe7

Top Contributor
Java:
    private static String getFormattedDuration(Duration duration) {
        return DateTimeFormatter.ISO_TIME.format(LocalTime.MIDNIGHT.plus(duration));
    }
 

BlackBookOne

Mitglied
du meinst das ernst und findest Date besser als die neue API
Ich bin mit meiner Meinung ja nicht alleine. Unter praktisch jeder Stackoverflow Frage steht, dass die DateTime API Scheiße ist und man besser z. B. Joda-Time verwenden sollte. Und man sieht das ja auch am umständlichen Code, der nötig ist, um eine Zeitspanne formatiert auszugeben. Also von daher ist deine Meinung absolut nicht nachvollziehbar.
 
K

kneitzel

Gast
Hmm ... das erinnert mich an tolle Aussagen a.la. Wir haben ja keine Ahunung im Vergleich zu den Leuten auf SO ...

Aber echt schlimm unser Verständnis von Clean Code ... das hatten wir doch in genug Threads von unserem Herren zu hören bekommen ...
 
K

kneitzel

Gast
Damit Du nicht groß recherchieren musst bezüglich Deiner Position, dass Joda-Time doch so viel besser ist, einfach mal ein Zitat von https://www.joda.org/joda-time/ - der besseren Alternative zu der neuen Date/Time API von Java:
The standard date and time classes prior to Java SE 8 are poor. By tackling this problem head-on, Joda-Time became the de facto standard date and time library for Java prior to Java SE 8. Note that from Java SE 8 onwards, users are asked to migrate to java.time (JSR-310) - a core part of the JDK which replaces this project.
Aber keine Angst: Du musst Deine Zeit nicht verschwenden. Du musst also über Deine Aussagen nicht reflektieren noch Fakten prüfen oder Dich mit irgendwelchen Dingen auseinander setzen. Das verlangt hier niemand von Dir!

Und wir haben doch immer gerne etwas zu lachen ...
 
K

kneitzel

Gast
Wenn Du jetzt noch irgendwelche Argumente bringen würdest ...

Wobei es einfach nur wieder ein triviales Textverständnis-Problem auf Deiner Seite sein dürfte:
Unter praktisch jeder Stackoverflow Frage steht, dass die DateTime API Scheiße ist und man besser z. B. Joda-Time verwenden sollte.
Ja - die ALTE date/time API war schrott ... daher gibt es ja die NEUE, die dann hier gezeigt wurde und um die es dann ging:
Moment, du meinst das ernst und findest Date besser als die neue API, die es nur gibt, weil eigentlich alles an Date scheiße ist? o_O

Und zu der Neuen API sagen selbst die Leute hinter Joda-Time, dass man bitte die neue API nutzen soll (Siehe Zitat von der Homepage) ...

Also daher ein einfacher Fall von schlechtem Textverständnis auf Deiner Seite - wie so oft. Und es tut schon fast in der Seele weh, dies jetzt aufzudecken anstatt einfach noch etwas zu sticheln und Dich noch etwas so neben der Spur zu lassen ... In die Phase "pers. Angriffe ohne jegliche fachliche Aussage" haben wir Dich ja schon bekommen ...

Aber einfach mal aus reinem Interesse: Du hattest doch schon wieder einen neuen Account erstellt hatte ich gesehen. Wechselst Du dennoch regelmäßig auch noch zu den etwas jüngeren Älteren Accounts? Was für Beweggründe treiben Dich da an? Einen Account im Forum hier zu erstellen ist ein tolles Erfolgserlebnis? Oder die ersten Erfolge im Forum a.la. jemand hat Like gedrückt? Oder was treibt Dich an? Der Punkt a.la. "jemand verlangsamt das Forum für deinen Account" wird es doch nicht sein, oder?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Timer vs ExecutorService: jeden Sonntag um 14.00 Uhr einen Task starten..? Java Basics - Anfänger-Themen 1
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
E multiple Timer die sich nicht summieren Java Basics - Anfänger-Themen 12
Jan_x8 Timer/Scanner Java Basics - Anfänger-Themen 5
C Timer aktualisieren Java Basics - Anfänger-Themen 5
L GUI- wie cancel ich einen Timer? Java Basics - Anfänger-Themen 10
missy72 Timer oder Timeline Java Basics - Anfänger-Themen 3
C java.util Timer läuft zu langsam? Java Basics - Anfänger-Themen 1
D Änder der Timer Speeds Java Basics - Anfänger-Themen 1
E Timer trotz erwartender Eingabe durchlaufen lassen Java Basics - Anfänger-Themen 11
L Methoden Timer Java Basics - Anfänger-Themen 9
J Memory-Spiel Aktivierung der Methode mit Timer Java Basics - Anfänger-Themen 44
G Animation Timer Nano Time Java Basics - Anfänger-Themen 2
S Timer reseten Java Basics - Anfänger-Themen 3
T Timer stoppt zu früh Java Basics - Anfänger-Themen 7
CptK Methoden Timer & Mathematischer Denkfehler Java Basics - Anfänger-Themen 7
mobaer Swing Timer stoppen Java Basics - Anfänger-Themen 3
C Wie erstellt man einen Timer/Delay? Java Basics - Anfänger-Themen 1
J Timer bauen, Main Methode immer wieder neu starten Java Basics - Anfänger-Themen 13
D Timer programmieren Java Basics - Anfänger-Themen 13
N Timer funktioniert nicht beim starten Java Basics - Anfänger-Themen 3
B Timer mehrere Male ausführen Java Basics - Anfänger-Themen 4
J Timer richtig pausieren Java Basics - Anfänger-Themen 2
E Timer erstellen Java Basics - Anfänger-Themen 2
B javax.ejb.Timer wieder starten? Java Basics - Anfänger-Themen 0
S actionlistener timer Java Basics - Anfänger-Themen 9
C Wie kann ich jetzt von der Game.java auf die Timer.java zugreifen? Java Basics - Anfänger-Themen 6
S timer mit imagedatei Java Basics - Anfänger-Themen 5
S timer Java Basics - Anfänger-Themen 0
V Java Uitil Timer Stoppt nicht Java Basics - Anfänger-Themen 2
KaffeeFan Timer beenden Java Basics - Anfänger-Themen 12
K Ampelsteuerung mit Timer Java Basics - Anfänger-Themen 8
F Array und Timer Java Basics - Anfänger-Themen 2
G Timer einsetzen Java Basics - Anfänger-Themen 2
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
F Timer beendet nicht immer Java Basics - Anfänger-Themen 2
F Timer abbrechen und wieder starten Java Basics - Anfänger-Themen 5
U Java Swing Timer mit ButtonKlick starten u. nach 12 Sekunden Befehl ausführen Java Basics - Anfänger-Themen 7
W Erste Schritte Timer soll jede Sekunde Label aktualisieren Java Basics - Anfänger-Themen 5
T Timer - HILFE Java Basics - Anfänger-Themen 10
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
A Wieso funktioniert dieser Timer nicht?? Java Basics - Anfänger-Themen 3
S timer funktion mit javax panel Java Basics - Anfänger-Themen 3
O Laufender Timer+Action Listener in Thread VS isAlive() Java Basics - Anfänger-Themen 4
O Starte Timer, während anderer Timer noch läuft. Ruft dies Schwierigkeiten hervor? Java Basics - Anfänger-Themen 0
M Schneller Timer Java Basics - Anfänger-Themen 2
C Timer aus anderer Klasse stoppen/starten Java Basics - Anfänger-Themen 3
B Timer beenden? Java Basics - Anfänger-Themen 0
G Erste Schritte Timer: In einem festgelegten Intervall eine Methode ausführen Java Basics - Anfänger-Themen 6
O Delayed Timer erstellen Java Basics - Anfänger-Themen 3
M Timer / Thread Java Basics - Anfänger-Themen 43
M Javax.swing - Timer(2 Button) Java Basics - Anfänger-Themen 17
J Timer - Swing Java Basics - Anfänger-Themen 5
A Timer: textarea.getText() mit Variable vergleichen Java Basics - Anfänger-Themen 3
D Problem mit Methode und Timer Java Basics - Anfänger-Themen 35
T Wie mache ich einen Timer der alle 2 sekunden aufgerufen wird? Java Basics - Anfänger-Themen 5
R Einfacher Timer geht nicht Java Basics - Anfänger-Themen 7
J Swing Timer Java Basics - Anfänger-Themen 3
M Einfacher Timer ;) Java Basics - Anfänger-Themen 15
M Timer für Termial-Eingaben Java Basics - Anfänger-Themen 3
C Methoden Einen Timer einbauen, aber wie? Java Basics - Anfänger-Themen 5
B Timer Java Basics - Anfänger-Themen 25
M Timer-Thread in Swing öffnet jedes Mal ein neues Fenster Java Basics - Anfänger-Themen 6
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
S Erste Schritte Java Timer Java Basics - Anfänger-Themen 13
E Threads Timer Java Basics - Anfänger-Themen 6
Spin KI Anfänger Frage : Timer Problem Java Basics - Anfänger-Themen 6
F Prüfen ob timer läuft Java Basics - Anfänger-Themen 6
L Erste Schritte Timer und Zugriffsattribute Java Basics - Anfänger-Themen 5
M Audio + Timer Java Basics - Anfänger-Themen 12
M Methoden Timer in ActionListener aufrufen Java Basics - Anfänger-Themen 2
R Klassen MemorySpiel: brauche Timer Java Basics - Anfänger-Themen 3
D Timer in Applet Java Basics - Anfänger-Themen 2
ruerob Warum ist Timer schneller als While? Java Basics - Anfänger-Themen 9
F Java Timer Frage Java Basics - Anfänger-Themen 14
VfL_Freak Verständnisfrage zur Klasse "TIMER" Java Basics - Anfänger-Themen 7
B Timer Java Basics - Anfänger-Themen 2
S timer task problem Java Basics - Anfänger-Themen 2
C Überprüfen, ob Timer läuft Java Basics - Anfänger-Themen 3
S "Kleines" Problem mit dem Timer Java Basics - Anfänger-Themen 4
Luk10 Problem mit vielen Timer(-Events) Java Basics - Anfänger-Themen 17
Luk10 Swing timer und Threads Java Basics - Anfänger-Themen 4
W Timer erstellen Java Basics - Anfänger-Themen 2
M Timer: period während Verlauf wechseln Java Basics - Anfänger-Themen 12
M Timer unterbrechen? Wo ist mein Thread? Java Basics - Anfänger-Themen 2
L Timer innerhalb eines Threads Java Basics - Anfänger-Themen 3
P Java Timer Java Basics - Anfänger-Themen 2
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
B problem mit timer/timertask, Farbverlauf Java Basics - Anfänger-Themen 10
Piwi Timer bei Programmende beenden Java Basics - Anfänger-Themen 25
T zweiter Timer überschreibt den ersten Timer ? Java Basics - Anfänger-Themen 5
kulturfenster Problem mit javax.swing.Timer Java Basics - Anfänger-Themen 2
C Regelmäßigen Timer bei Zeitüberschreitung nacheinander abarbeiten Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
J timer Java Basics - Anfänger-Themen 2
H Timer Java Basics - Anfänger-Themen 3
dl85hej Zeitsitschleife anstatt Timer Java Basics - Anfänger-Themen 5
G Klasse mit Timer nicht beenden Java Basics - Anfänger-Themen 6
S Timer / TimerTask Frage Java Basics - Anfänger-Themen 8
S Timer bzw. TimerTask Frage Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben