在java中计算计时器不是从0

时间:2016-05-05 09:35:19

标签: java date time timer simpledateformat

我创建了一个计数定时器函数,用于java swing窗口。问题是时间不会从零开始计数。当我启动计时器时,初始时间总是提前一小时。

这是我的代码:

    public static void timeRecording(){
        Date startTime = new Date();
            int delay = 1000; //milliseconds
            ActionListener taskPerformer = new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                        SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm:ss");
                        Date actualTime = new Date();
                        String dateToPrint = timeFormat.format(new Date(actualTime.getTime() - startTime.getTime()));


                        //String dateToPrint = timeFormat.format(actualTime);
                        System.out.println(actualTime);
                        //actualTime
                       // String timeToPrint.timeFormat = actualTime;
                        timerLabel.setText(dateToPrint);

                }
            };
    new Timer(delay, taskPerformer).start();

}

这是开始时显示的时间: Time shown at start

2 个答案:

答案 0 :(得分:0)

如果日期之间的差异是一秒,会发生什么:new Date(actualTime.getTime() - startTime.getTime())在1970年1月1日00:01 UTC创建日期。

但是当你格式化它时,DateFormat会使用你的时区(里斯本= UTC + 1)并将日期视为1970年1月1日01:01 UTC + 1。

如果要获得正确的输出,则需要设置格式化程序的时区:

SimpleDateFormat fmt = new SimpleDateFormat("HH:mm:ss");
fmt.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(fmt.format(new Date(0))); //outputs 00:00:00 as expected

注意:正确的格式模式是HH(0-23),而不是hh(1-12)。

答案 1 :(得分:0)

SimpleDateFormat "hh:mm:ss" h使用1,其中JavaDoc被描述为:

  

h上午/下午小时( 1-12

因此,您的小时将始于"KK:mm:ss"

您可以尝试使用

  

上午/下午K小时(0-11)

即。 find . -name foo -type d -prune -o -name foo