Zeit Differenz automatisch aktualisieren

27sharp

Mitglied
Hallo Leute,

Ich stehe zurzeit vor einem Problem.
Ich berechne zunächst die Differenz zwischen zwei Uhrzeiten, danach möchte ich dies ausgeben.
Auf der Konsole funktioniert das zwar aber ich möchte die Differenz jede Sekunde aktualisieren.(wie ein Coundtdown)
Mein Problem ist jetzt bei der aktualisierung.

Mein Code zur Differenzberechnung:
TimeDifferenz
Java:
public class TimeDifference {
	private String time;
	private int stunden;
	private int minuten;
	private int sekunden;
	LocalTime localtime = new LocalTime();
	
	public String getDifference(String t) {
		 Seconds seconds = Seconds.secondsBetween(localtime, LocalTime.parse(t));
		 stunden = seconds.getSeconds() / 3600;
		 minuten = (seconds.getSeconds() - stunden * 3600) / 60;
		 sekunden = (seconds.getSeconds() - (stunden*3600) - (minuten*60));
		
		 time = String.format("%02d:%02d:%02d",stunden, minuten,sekunden);
		
		 return time;
	}

Es geht immer um 6 Uhrzeiten, von denen die Differenz zur aktuellen Zeit berechnet werden soll.

Also z.B: aktuelle Zeit: 15.00Uhr ; andere Zeit: 15:30Uhr; Ausgabe: 00:30:00

So es geht ja um sechs Zeiten. Die werden zunächst geprüft welche Zeit am nähesten zur aktuellen Zeit ist und dann die Differenz ausgerechnet:

TimeCalculator

Java:
public class TimeCalculater {
	NamazTimes nz = new NamazTimes();
	TimeDifference td = new TimeDifference();
	Date date = new Date();
	SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
	private String nowDate = sdf.format(date);

	public void Calculate() throws ParseException, IOException {
		
		if(nowDate.compareTo(nz.getImsak())< 0) {
			
			
			td.getDifference(nz.getImsak());
		}
		
		
		if(nowDate.compareTo(nz.getImsak())==0)
			{
				System.out.println("Ezan Imsak!");
				
			}
		if(nowDate.compareTo(nz.getImsak())> 0) { // prüfen ob Zeit größer als Imsak, dann..
		if(nowDate.compareTo(nz.getGunes())< 0) {
			
			td.getDifference(nz.getGunes());
			
		}
		}
		if(nowDate.compareTo(nz.getGunes())== 0)
		{
			System.out.println("Ezan Günes!");
			
		}
		if(nowDate.compareTo(nz.getGunes())> 0) {
		if(nowDate.compareTo(nz.getOegle()) < 0) {
			
			td.getDifference(nz.getOegle());
		
		}
		}
		if(nowDate.compareTo(nz.getOegle()) == 0) {
			System.out.println("Ezan Öyle");
			
		}
		if(nowDate.compareTo(nz.getOegle())> 0) {
		if(nowDate.compareTo(nz.getIkindi()) < 0) {
			
			td.getDifference(nz.getIkindi());
		
		}
		}
		if(nowDate.compareTo(nz.getIkindi()) == 0) {
			System.out.println("Ezan Ikindi");
		}
		if(nowDate.compareTo(nz.getIkindi())> 0) {
		if(nowDate.compareTo(nz.getAksam()) < 0) {
			
			 td.getDifference(nz.getAksam());
		}
		}
		if(nowDate.compareTo(nz.getAksam()) == 0) {
			System.out.println("Ezan Aksam");
		
		}
		if(nowDate.compareTo(nz.getAksam())> 0) {
		if(nowDate.compareTo(nz.getYatsi()) < 0) {
			
			 td.getDifference(nz.getYatsi());
				
			}
			
			
		}
		
		
	}

Hierbei ist getImsak in Zeile 10 zum Beispiel eine von den sechs Zeiten.
So jetzt wieder zur Problemstellung:

Mein Ansatz bis jetzt mit Timer, der aber nicht Funktioniert:

Main

Java:
JFrame frame = new JFrame("EzanTime");
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			final JLabel uhrzeit = new JLabel("---");
			Timer timer = new Timer(1000, new ActionListener() {

				@Override
				public void actionPerformed(ActionEvent e) {
					try {
						uhrzeit.setText(tc.Calculate());
					} catch (ParseException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					} catch (IOException e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					
				}
			});
			timer.start();
			frame.add(uhrzeit);
			frame.pack();
			frame.setVisible(true);

Ich weiß jetzt nicht wie ich weiter machen soll.
Vielen Dank im voraus.
 
Zuletzt bearbeitet:
Hallo 27sharp,
ich finde deinen Code etwas lang dafür das du nur so etwas einfaches wie eine Zeit Differenz darstellen willst. Ich habe hier eine Lösung die ich mal in der Schule geschrieben habe für dich sie besteht aus Zweit Classen und rund 80 Zeilen.

Das GUI
Eine einfache Frame mit einem Label darauf. in der initCalculation() setzen wir die Neue Uhrzeit und starten den Work-Flow.
Java:
package Zeit;

import java.awt.BorderLayout;
import java.awt.Font;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class ZeitFrame extends JFrame {
	public static void main(String[] args) {
		ZeitFrame frame = new ZeitFrame();
		frame.setVisible(true);
	}
	private JLabel label;
	public ZeitFrame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		label = new JLabel("<Zeit>");
		label.setFont(new Font("Tahoma", Font.PLAIN, 25));
		label.setHorizontalAlignment(SwingConstants.CENTER);
		add(label, BorderLayout.CENTER);
		pack();
		initCalculation();
	}

	private void initCalculation() {
		Calendar start=Calendar.getInstance();
		
		Calendar stop=Calendar.getInstance();
		stop.set(Calendar.HOUR_OF_DAY,23); //Stunden
		stop.set(Calendar.MINUTE, 30); //Minuten 
		
		new ZeitCalculater(start, stop, label);
	}
}

Der Work-Flow
Der Work-Flow besteh wie bei dir auch aus zwei Zeiten und einem Swing Timer der alle 1000 milli ausgeführt wird. Um die Differenz zu errechnen wird nun die Start Zeit(aktuelle Zeit) bei jeder Aktualisierung neu auf den jetzigen stand Aktualisiert.
Java:
package Zeit;

import java.awt.BorderLayout;
import java.awt.Font;
import java.util.Calendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;

public class ZeitFrame extends JFrame {
	public static void main(String[] args) {
		ZeitFrame frame = new ZeitFrame();
		frame.setVisible(true);
	}
	private JLabel label;
	public ZeitFrame() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationRelativeTo(null);
		label = new JLabel("<Zeit>");
		label.setFont(new Font("Tahoma", Font.PLAIN, 25));
		label.setHorizontalAlignment(SwingConstants.CENTER);
		add(label, BorderLayout.CENTER);
		pack();
		initCalculation();
	}

	private void initCalculation() {
		Calendar start=Calendar.getInstance();
		
		Calendar stop=Calendar.getInstance();
		stop.set(Calendar.HOUR_OF_DAY,23); //Stunden
		stop.set(Calendar.MINUTE, 30); //Minuten 
		
		new ZeitCalculater(start, stop, label);
	}
}
 

Zurück
Oben