JavaFXLocalTime构建秒表

JavaFXLocalTime构建秒表,javafx,localtime,Javafx,Localtime,下面的代码用于构建秒表。当按下按钮并从AnimationTimer调用该方法时,将设置变量sMIN和sSEC 我想知道是否有一种更简单的方法来编写这个例程,因为它看起来像意大利面条一样 private void elapsedTIME(){ eSEC = LocalTime.now().getSecond(); if(eSEC > sSEC){ showSEC = eSEC - sSEC; } if(eSEC <= sSEC

下面的代码用于构建秒表。当按下按钮并从AnimationTimer调用该方法时,将设置变量sMIN和sSEC

我想知道是否有一种更简单的方法来编写这个例程,因为它看起来像意大利面条一样

    private void elapsedTIME(){

    eSEC = LocalTime.now().getSecond();

    if(eSEC > sSEC){
        showSEC = eSEC - sSEC;
    }
    if(eSEC <= sSEC){
        showSEC = eSEC + (60-sSEC);     
    }

    if(showSEC == 60 && elapsedTimeTest == true){
        elapsedTimeTest = false;
    }
    if(showSEC == 60 && elapsedTimeTest == false ){
        eMIN = LocalTime.now().getMinute();
        if(eMIN > sMIN){
            showMIN = eMIN - sMIN;
        }
        if(eMIN == 0 && eMIN != sMIN){
            showMIN = 60 - sMIN;
        }
        if(eMIN < sMIN && eMIN != 0){
            showMIN = (60-sMIN) + eMIN;
        }
    }
    msg.setText("Elapsed Time "+showMIN+" Minutes "+(showSEC)+" Seconds"); 
}
private void elapsedTIME(){
eSEC=LocalTime.now().getSecond();
如果(eSEC>sSEC){
showSEC=eSEC-sSEC;
}
如果(eSEC sMIN){
showMIN=eMIN-sMIN;
}
if(eMIN==0&&eMIN!=sMIN){
showMIN=60-sMIN;
}
if(eMIN
我假设
sSEC
sMIN
是开始时的秒和分

不要单独存储它们,只需在开始时存储
LocalTime
。然后,您可以执行以下操作:

LocalTime startTime ;

// ...

private void elapsedTIME(){

    // Assumes startTime is set somewhere before this is invoked

    long elapsedSeconds = Duration.between(startTime, LocalTime.now()).getSeconds();
    long minutes = elapsedSeconds / 60 ;
    long seconds = elapsedSeconds % 60 ;
    msg.setText("Elapsed Time "+minutes+" Minutes "+seconds+" Seconds"); 
}
SSCCE:

import java.time.Duration;
import java.time.LocalTime;

import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.BooleanProperty;
import javafx.beans.property.SimpleBooleanProperty;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Stopwatch extends Application {

    @Override
    public void start(Stage primaryStage) {
        Label stopwatch = new Label();
        BooleanProperty running = new SimpleBooleanProperty(false);

        AnimationTimer timer = new AnimationTimer() {

            private LocalTime startTime ;

            @Override
            public void handle(long now) {
                long elapsedSeconds = Duration.between(startTime, LocalTime.now()).getSeconds();
                long minutes = elapsedSeconds / 60 ;
                long seconds = elapsedSeconds % 60 ;
                stopwatch.setText("Time: "+minutes +" minutes "+seconds + " seconds");
            }
            @Override
            public void start() {
                running.set(true);
                startTime = LocalTime.now();
                super.start();
            }
            @Override
            public void stop() {
                running.set(false);
                super.stop();
            }
        };

        Button startStop = new Button();
        startStop.textProperty().bind(Bindings.when(running).then("Stop").otherwise("Start"));
        startStop.setOnAction(e -> {
            if (running.get()) {
                timer.stop();
            } else {
                timer.start();
            }
        });

        VBox root = new VBox(10, stopwatch, startStop);
        root.setPadding(new Insets(24));
        root.setMinWidth(240);
        root.setAlignment(Pos.CENTER);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

请注意,如果秒表运行时时间已过午夜,则此功能可能无法正常工作;您可以使用
LocalDateTime
来解决此问题

这类问题对,,虽然。你的代码很优雅,但是如果你在59分钟启动秒表,当它经过一个周期,其中分钟是00,那么变量分钟变成-56。我的想法是,我们仍然需要一个测试,当这种情况发生时,分钟只能有两个条件0或>0,因此我在我的代码中对零的测试显示分钟,我将尝试LocalDateTime,但不确定这是否能解决问题谢谢你的帮助使用第一个版本,而不是第二个版本。(或者也可以记录时间。)