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 lorsque je l'exécute.
Mais je veux qu'il compte le temps pendant son exécution.
Donc, par exemple maintenant, lorsque je l'exécute à 00:37:53, cela s'affiche cette fois, mais je veux 00:37:53 au démarrage et j'arrête de l'exécuter à 00:40:55. Je veux que ça me montre 00:37:53, 00:37:54, 00:37:55 et ainsi de suite.
Maintenant, comment puis-je faire cela?
Que diriez-vous d'utiliser une minuterie, comme javax.swing.Timer
? (Ne vous trompez pas dans l'importation, il y a plus de classes Timer.)
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, imprimant l'heure actuelle.
Le Thread.join
l'appel 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, cela s'arrêterait immédiatement.
Dans une application réelle, dans le cas où il s'agit d'une application Swing, le minuteur doit gérer le filetage seul, vous n'aurez donc pas à vous en soucier.
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 dans System.out, modifiez le texte de l'étiquette donnée:
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();
}
Vous ne mentionnez pas la plateforme technique de votre interface utilisateur, telle que Swing , SWT , Vaadin , Web, etc. Je n'aborderai donc pas ces détails. L'approche de base ici s'applique à toutes les technologies d'interface utilisateur.
Deux idées de base:
Pour Swing, le Swing Timer peut être approprié (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 l'instant actuel. Recherchez Stack Overflow pour en savoir plus sur ce Executor
.
Utilisez la classe Instant
pour capturer l'instant actuel sur la timeline en UTC avec une résolution allant jusqu'à nanosecondes.
Instant now = Instant.now();
Passez cet objet au thread d'interface utilisateur.
Sur le thread d'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
. Remarquez le ofLocalized…
méthodes sur DateTimeFormatter
.
Recherchez Stack Overflow pour plusieurs centaines de questions et réponses connexes pour plus de détails.
Vous pouvez essayer ça,
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'informations sur la date et l'heure dans 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
Utilisez un formateur de date simple avec hh: mm comme format.
SimpleDateFormat sdf = new SimpleDateFormat("HH:MM a");
public void ShowTime() {
new Timer(0, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Date d = new Date();
SimpleDateFormat s = new SimpleDateFormat("dd/MM/yyy hh:mm:ss a");
time.setText(s.format(d)); //time= jlabel
}
}).start();
}
Changer l'heure en continu (rafraîchir toutes les secondes)
Ajoutez une boucle avec une instruction d'incrémentation, de sorte que l'horloge continue de tourner jusqu'à la condition donnée.