Java afficher l'heure actuelle


J'ai un code qui me montre la date et l'heure actuelles lorsque j'exécute mon application

DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Calendar cal = Calendar.getInstance();
System.out.println(dateFormat.format(cal.getTime()));

Maintenant, il me montre: 2012/12/11 00:36:53 quand je l'exécute.

Mais je veux qu'il compte le temps pendant son exécution.

Donc par exemple maintenant quand je l'exécute sur 00:37:53 il montre cette fois, mais je veux 00:37:53 au démarrage et j'arrête de l'exécuter sur 00:40:55 . Je veux qu'il me montre 00:37:53, 00:37:54, 00:37:55 et ainsi de suite.

Maintenant, comment puis-je faire cela?

Author: Ripon Al Wasim, 2012-12-11

5 answers

Que diriez-vous d'utiliser une minuterie, telle que javax.swing.Timer? (Ne faites pas d'erreur dans l'importation, il y a plus de classes de minuterie.)

public static void main(String... args) throws InterruptedException {
    final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    int interval = 1000; // 1000 ms

    new Timer(interval, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Calendar now = Calendar.getInstance();
            System.out.println(dateFormat.format(now.getTime()));
        }
    }).start();

    Thread.currentThread().join();
}

Cela exécutera simplement le corps de l'ActionListener chaque seconde, en imprimant l'heure actuelle.

L'appel Thread.join sur la dernière ligne n'est pas universellement nécessaire, il est juste nécessaire pour que cet exemple de code s'exécute jusqu'à ce que le processus soit arrêté manuellement. Sinon, il serait immédiatement arrêter.

Dans une application réelle, au cas où c'est un Swing app, alors la minuterie devrait gérer le filetage par elle-même, de sorte que vous n'aurez pas à vous en soucier.


Modifier

L'intégration de l'exemple ci-dessus dans votre application est assez simple, ajoutez-le simplement dans la méthode initGUI et au lieu d'imprimer l'heure actuelle sur le système.set de modifier le texte de l'étiquette:

public void initGUI() {
    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);        
    setPreferredSize(new Dimension(800, 600));
    setLayout(null);

    Calendar now = Calendar.getInstance();
    tijd = new JLabel(dateFormat.format(now.getTime()));
    tijd.setBounds(100, 100, 125, 125);
    window.add(tijd);

    new Timer(1000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Calendar now = Calendar.getInstance();
            tijd.setText(dateFormat.format(now.getTime()));
        }
    }).start();

    pack();
}
 5
Author: Natix, 2012-12-11 15:28:00

Vous ne mentionnez pas la plate-forme technique de votre interface utilisateur, tels que Swing, SWT, Vaadin, web, et ainsi de suite. Donc, je ne vais pas aborder ces détails. L'approche de base s'applique ici à toutes les technologies d'interface utilisateur.

Deux idées de base:

  • Créez un élément dans votre interface utilisateur pour représenter le moment actuel. Peut - être une étiquette de texte ou un widget fantaisie tel qu'un cadran d'horloge animé.
  • Fil d'arrière-plan capture régulièrement le moment actuel pour une mise à jour de l'affichage de cet élément d'interface utilisateur. Soyez prudent dans la façon dont le thread d'arrière-plan atteint le thread de l'interface utilisateur. Utilisez la technique d'interface utilisateur appropriée pour communiquer la nouvelle valeur date-heure et provoquer la mise à jour du widget d'interface utilisateur.

Exécuteur testamentaire

Pour Swing, la minuterie Swing peut être appropriée (pas sûr de l'état actuel de cette technologie). Mais sinon, apprenez à utiliser un ScheduledExecutorService pour qu'un thread séparé capture à plusieurs reprises le moment actuel. La Recherche De La Pile Déborder pour en savoir beaucoup plus à ce sujet Executor.

Java.temps

Utilisez la classe Instant pour capturer le moment actuel sur la timeline en UTC avec une résolution allant jusqu'à nanosecondes.

Instant now = Instant.now();

Passez cet objet au thread de l'interface utilisateur.

Sur le thread de l'interface utilisateur, appliquez le fuseau horaire souhaité/attendu de l'utilisateur ZoneId pour produire un ZonedDateTime.

ZoneId z = ZoneId.of( "Pacific/Auckland" ) ;
ZobedDateTime zdt = instant.atZone( z ) ;

Si vous avez besoin d'une chaîne pour représenter cette date-heure, appelez toString ou utilisez DateTimeFormatter. Notez les méthodes ofLocalized… sur DateTimeFormatter.

Recherchez Stack Overflow pour plusieurs centaines de questions et réponses connexes pour plus de détails.

 1
Author: Basil Bourque, 2017-11-02 15:05:45

Utilisez un formateur de date simple avec hh:mm comme format.

SimpleDateFormat sdf = new SimpleDateFormat("HH:MM a");

Cliquez ici pour le programme complet.

 0
Author: user2824143, 2013-09-27 16:23:53

Ajoutez une boucle avec une instruction increment, de sorte que l'horloge continuera à cocher jusqu'à condition donnée.

 0
Author: user6514497, 2016-06-26 09:28:48

Vous pouvez essayer ceci,

import java.awt.*;
import java.awt.event.*;
import java.util.Date;
import java.lang.Thread;

public class TimeInSeconds extends Frame implements Runnable
{
    private Label lblOne;
    private Date dd;
    private Thread th;

    public TimeInSeconds()
    {
        setTitle("Current time");
        setSize(200,150);
        setVisible(true);
        setLayout(new FlowLayout());
        addWindowListener(new WindowAdapter() {
            public void windowClose(WindowEvent we){
                System.exit(0);
            }
        });
        lblOne = new Label("00:00:00");
        add(lblOne);

        th = new Thread(this);
        th.start(); // here thread starts
    }

    public void run()
    {
        try
        {
            do
            {
                dd = new Date();
                lblOne.setText(dd.getHours() + " : " + dd.getMinutes() + " : " + dd.getSeconds());
                Thread.sleep(1000);  // 1000 = 1 second
            }while(th.isAlive());
        }
        catch(Exception e)
        {

        }
    }

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

, Vous pouvez exécuter ce programme et obtenir la sortie.

Pour plus d'infos sur la date et l'heure en java, vous pouvez consulter les liens ci-dessous,

Https://docs.oracle.com/javase/tutorial/datetime/iso/datetime.html

Https://docs.oracle.com/javase/7/docs/api/java/sql/Date.html

Http://www.flowerbrackets.com/date-time-java-program/

 0
Author: Shiva, 2017-11-02 13:01:09