-2

我想cal.setTime (new Date());在我的代码中使用来更新时间,但它不起作用。

import javax.swing.JOptionPane;

public class Exercise2b {
    public void demo() {
        String message1, message2;
        int hour, minute, second;
        Time dt = new Time();
        hour = dt.getHour();
        minute = dt.getMinute();
        second = dt.getSecond();
        message1 = "The clock is " + minute + " minutes over " + hour + " (+"
                + second + " seconds)";
        message2 = dt.toString();
        JOptionPane.showMessageDialog(null, message1);
        JOptionPane.showMessageDialog(null, message2);
        dt.update();
        message2 = dt.toString();
        JOptionPane.showMessageDialog(null, message2);
    }

    public static void main(String[] args) {
        Exercise2b prog = new Exercise2b();
        prog.demo();
    }
}

import java.util.Calendar;
import java.util.Date;

public class Time {
    private Calendar cal; 
    private int hour;
    private int minute;
    private int second;

    public Time() {
        cal = Calendar.getInstance();
        this.hour = cal.get(Calendar.HOUR_OF_DAY);
        this.minute = cal.get(Calendar.MINUTE);
        this.second = cal.get(Calendar.SECOND);
    }
    public int getHour() {
        return this.hour;
    }
    public int getMinute() {
        return this.minute;
    }
    public int getSecond() {
        return this.second;
    }
    public String toString() {
        return hour + ":" + minute + ":" + second;
    }
    public void update() {
        cal.setTime (new Date());
    }
}
4

3 回答 3

3

我怀疑问题是您设置了变量,cal而不是从构造函数中 `cal 的初始值设置的 // 变量hourminuteseconds

这是 DRY 的一个例子(不要重复自己)。在这种情况下,很容易陷入不一致的状态。我只是让您的访问器方法直接查询 cal 对象(而不是使用中间变量)。也许调查 Joda 库以获得更好/更可靠的日期/时间 API。

于 2013-10-21T14:56:18.837 回答
0

问题是当您调用 update() 方法时,您并没有刷新局部变量的值(秒/分钟/小时)。这些已经从构造函数初始化。

于 2013-10-21T14:59:00.343 回答
0

如何 cal.setTime(new Date()); 工作?

javadoc 状态

使用给定的日期设置此日历的时间。

new Date()创建一个Date毫秒值为 的新对象System.currentTimeMillis()

所以

cal.setTime (new Date()); 

会将 的内部毫秒值替换为calDate对象的毫秒值。

于 2013-10-21T14:59:04.153 回答