Java显示当前时间

时间:2012-12-10 23:40:56

标签: java date time timer

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

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等等。

现在我该怎么做?

6 个答案:

答案 0 :(得分:6)

如何使用计时器,例如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 set,更改给定标签的文本:

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

答案 1 :(得分:2)

您没有提及用户界面的技术平台,例如SwingSWTVaadin,网络等。所以我不会解决这些问题。这里的基本方法适用于所有UI技术。

两个基本想法:

  • 在用户界面中创建一个元素以表示当前时刻。可以是文本标签或花哨的小部件,例如动画钟面。
  • 后台线程定期捕获当前时刻以更新该UI元素的显示。注意后台线程如何进入UI线程。使用适当的UI技术来传达新的日期时间值并使UI小部件更新。

执行人

对于Swing,Swing Timer可能是合适的(不确定该技术的当前状态)。但除此之外,学习如何使用ScheduledExecutorService让一个单独的线程重复捕获当前时刻。搜索Stack Overflow以了解有关Executor的更多信息。

java.time

使用Instant类以UTC为单位捕获时间轴上的当前时刻,分辨率最高可达纳秒。

Instant now = Instant.now();

将该对象传递给UI线程。

在UI线程上,应用用户所需/预期的时区ZoneId以生成ZonedDateTime

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

如果您需要字符串来表示该日期时间调用toString或使用DateTimeFormatter。请注意ofLocalized…上的DateTimeFormatter方法。

搜索Stack Overflow以获取更多详细信息,包括数百个相关问题和解答。

答案 2 :(得分:1)

你可以试试这个,

<script>

    var today = new Date();
    var dd = today.getDate();
    var mm = today.getMonth() + 1; //January is 0!
    var yyyy = today.getFullYear();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();


    if (dd < 10) {
        dd = '0' + dd
    }

    if (mm < 10) {
        mm = '0' + mm
    }
    if (h < 10) { h = '0' + h }
    if (m < 10) { m = '0' + m }
    if (s < 10) { s = '0' + s }

    var ctoday = dd + '/' + mm + '/' + yyyy+ '\t' +h+ ':' +m+ ':' +s;
    var d = new Date()
    var weekday = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
    console.log("Today is " + weekday[d.getDay()])
    document.getElementById('time').innerHTML = '<span style="color:blue">' + weekday[d.getDay()] + ", " + ctoday + '</span>';
</script>
<div>
<span> Today is : <span id="time"> </span>
</div>

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

有关java中日期和时间的更多信息,请参阅以下链接,

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/

答案 3 :(得分:0)

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

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

Click here for complete program.

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

连续更改时间(每秒刷新一次)