12

我有一个代码,它显示了我运行应用程序时的当前日期和时间

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

现在它向我显示: 2012/12/11 00:36:53 当我运行它时。

但我希望它在运行期间计算时间。

因此,现在举例来说,当我在 00:37:53 上运行它时,它会显示这个时间,但我希望 00:37:53 在开始时停止运行,并且我在 00:40:55 上停止运行它。我希望它显示 00:37:53、00:37:54、00:37:55 等等。

现在我该怎么做?

4

6 回答 6

8

如何使用计时器,例如javax.swing.Timer?(不要在导入时出错,还有更多的 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();
}

这将简单地每秒执行一次 ActionListener 的主体,打印当前时间。

最后一行的Thread.join调用不是普遍需要的,它只是需要让这个示例代码运行直到手动停止进程。否则,它会立即停止。

在一个真正的应用程序中,如果它是一个 Swing 应用程序,那么计时器应该自己处理线程,所以你不必担心它。


编辑

将上述示例集成到您的应用程序中非常简单,只需将其添加到initGUI方法中,而不是将当前时间打印到 System.out 设置更改给定标签的文本:

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();
}
于 2012-12-11T00:46:56.713 回答
2
于 2016-06-27T04:06:08.293 回答
1
    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();
    }

不断改变时间(每秒刷新)

于 2020-01-17T21:01:08.077 回答
1

你可以试试这个

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();
    }
}

您可以运行此程序并获取输出。

有关 java 中日期和时间的更多信息,您可以参考下面的链接,

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

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

https://www.flowerbrackets.com/how-to-get-current-date-time-in-java/

于 2017-11-02T13:01:09.237 回答
0

使用带有 hh:mm 作为格式的简单日期格式化程序。

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

点击这里查看完整程序。

于 2013-09-27T15:59:24.610 回答
0

添加一个带有增量语句的循环,因此时钟将一直滴答作响,直到给定条件。

于 2016-06-26T09:18:18.560 回答