2 Uhrzeiten vergleichen und Differenz ausgeben


Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

AndyBN

Grünschnabel
#1
Hallo an alle,

ich habe vor kurzem begonnen mich in die Programmierung mit Java einzuarbeiten.
Ich bin neu hier im Forum hoffe auf wertvolle Tipps mit denen ich die ersten "Hürden" besser bewältigen kann.

Als erstes Projekt habe ich mir eine Stechuhr für meine Tägliche Arbeitszeit vorgenommen.
Mit FX habe ich ein GUI erstellt.
Startzeit und Endzeit wird über betätigen des Start bzw. Ende Button in einem Textfeld angezeigt und im ersten Schritt in eine Textdatei geschrieben.
Beendet wird mein Programm über einen Beenden Button.

Nun zu meinem Problem:
Es gibt einen weiteren Button: Aktualisieren, dieser soll mir die Differenz zwischen Startzeit und aktueller Zeit anzeigen, also wie viel Zeit nach betätigen des Startbuttons bereits vergangen ist. Leider komme ich aber im Moment nicht weiter.

Startzeit wird in text1 und Aktualisierte Zeit in text4 gespeichert. Will ich beide Zeiten von einander Subtrahieren und in Std speichern. Leider bekomme ich immer einen Fehler angezeigt:
bad operant typ for binary operator -
first typ string
second typ string

Was ist mein Fehler?
 

ComFreek

Mod | @comfreek
Moderator
#2
Normalerweise würde ich an dieser Stelle dich bitten, deinen Code zu posten. (Und das solltest du auch sonst immer tun!)
Tatsächlich kann ich aber von der Fehlermeldung und deiner Beschreibung inferieren, dass du zwei Strings via '-' subtrahieren wolltest. Wie sollte Subtraktion denn auf Strings deiner Meinung definiert sein?

Startzeit wird in text1 und Aktualisierte Zeit in text4 gespeichert.
Das solltest du bereits nicht tun. In den Textfeldern anzeigen ist OK, aber darin ausschließlich speichern nicht.
 

AndyBN

Grünschnabel
#3
Normalerweise würde ich an dieser Stelle dich bitten, deinen Code zu posten. (Und das solltest du auch sonst immer tun!)
Tatsächlich kann ich aber von der Fehlermeldung und deiner Beschreibung inferieren, dass du zwei Strings via '-' subtrahieren wolltest. Wie sollte Subtraktion denn auf Strings deiner Meinung definiert sein?


Das solltest du bereits nicht tun. In den Textfeldern anzeigen ist OK, aber darin ausschließlich speichern nicht.
ja richtig, ich wollte 2 Strings voneinander subtrahieren. Der Inhalt ist ja z.B 14.55 und 15.10.
Was wäre eine Alternative nachdem mein Weg nicht funktioniert? Wie kann ich an die Differenz der beiden Werte kommen?

Die beiden Variablen werden wie nachfolgend initialisiert:

Code:
 private static final SimpleDateFormat sdf1 = new SimpleDateFormat("HH.mm");

Timestamp timestamp = new Timestamp(System.currentTimeMillis());
tf3.setText(sdf1.format(timestamp));        //Ausgabe Textfeld
text4 = sdf1.format(timestamp);                //Speichern in Variable text4
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
#4
Das solltest du bereits nicht tun. In den Textfeldern anzeigen ist OK, aber darin ausschließlich speichern nicht.
Wie bereits gesagt, solltest du den Timestamp als Instanzvariable in deiner Klasse speichern.

Wie sollte Subtraktion denn auf Strings deiner Meinung definiert sein?
Diese Frage war ein bisschen dazu gedacht, dich zum Schluss zu bewegen, dass Subtraktion auf Strings unsinnig im Allgemeinen ist, aber Subtraktion auf Timestamps genau das ist, was du möchtest. D.h. recherchier mal über "Java Timestamps Subtraction".
 

AndyBN

Grünschnabel
#5
@ComFreek , Danke für den Hinweis.(y)

Warum kann ich nicht auf timestamp0 zugreifen? Bzw. wie bekomme ich Zugriff auf timestamp0?

Code:
Button bt1 = new Button("Start");
       bt1.setLayoutX(30);
       bt1.setLayoutY(30);
       
       bt1.setOnAction((ev)->{
        Timestamp timestamp0 = new Timestamp(date.getTime());
        tf1.setText(sdf.format(timestamp0));
        text = tf1.getText();
        text1 = sdf1.format(timestamp0);
        eingabe();
        
       });
      
 Button bt4 = new Button("Aktualisieren");
       bt4.setLayoutX(30);
       bt4.setLayoutY(160);

       bt4.setOnAction((ev)->{
       Timestamp timestamp1 = new Timestamp(date.getTime());
        tf3.setText(sdf1.format(timestamp1));
        text4 = sdf1.format(timestamp1);
        long differenc = timestamp1.getTime()- timestamp0xx; //kein Zugriff auf timestamp0
      
        System.out.println(differenc);
        
       });
 

ComFreek

Mod | @comfreek
Moderator
#6
Du solltest dich über Variablenscopes informieren. timestamp0 ist nur in dem innersten Block "{...}" (also der erste, wo davor "->" steht und danach ")") verfügbar
 

AndyBN

Grünschnabel
#7
Problem gelöst.

Meine Lösung:

Code:
public class TimeControl extends Application {

private Timestamp timestamp0;

    @Override
    public void start(Stage primaryStage) throws InterruptedException {
   
    Button bt4 = new Button("Aktualisieren");
       bt4.setLayoutX(30);
       bt4.setLayoutY(160);
       bt4.setOnAction((ev)->{

       Timestamp timestamp1 = new Timestamp(System.currentTimeMillis());
             
       long differenc = timestamp1.getTime()- timestamp0.getTime();
     
       tf3.setText(sdf1.format(differenc));
     });
Danke für die Unterstützung:)
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…