我的秒表给了我一个奇怪的时间。 它显示为16:00:00:000,它也将秒数放入毫秒槽。我认为问题是日期格式化程序。如果没有dateformater,只需使用十进制格式就可以正确显示。我只需要它来显示小时,分钟和秒钟。
public class StopWatchTest extends JLabel implements ActionListener {
private static final String Start = "Start";
private static final String Stop = "Stop";
private SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss.SSS");
private Timer timer = new javax.swing.Timer(100, this);
private long now = System.currentTimeMillis();
public StopWatchTest() {
this.setHorizontalAlignment(JLabel.CENTER);
this.setText(when());
}
public void actionPerformed(ActionEvent ae) {
setText(when());
}
public void start() {
timer.start();
}
public void stop() {
timer.stop();
}
private String when() {
return df.format((System.currentTimeMillis() - now) / 1000d);
}
private static void create() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final StopWatchTest jtl = new StopWatchTest();
jtl.setFont(new Font("Dialog", Font.BOLD, 32));
f.add(jtl, BorderLayout.CENTER);
final JButton button = new JButton(Stop);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();
if (Stop.equals(cmd)) {
jtl.stop();
button.setText(Start);
} else {
jtl.start();
button.setText(Stop);
}
}
});
f.add(button, BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
jtl.start();
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
create();
}
});
}
}
答案 0 :(得分:4)
DateFormat
格式化由毫秒值指定的即时,并且您尝试使用它来格式化间隔。 JDK中没有任何内容涵盖您的用例,但JodaTime可以。无论如何你应该使用JodaTime。
答案 1 :(得分:0)
除了Marko指出的内容之外,您还尝试格式化未明确定义的double。 Java将从java.text.Format调用format(Object)函数。您至少应该使用Date对象作为参数,例如:
return df.format(new Date(System.currentTimeMillis() - now));
除了Marko,我认为这将以实际解决方案结束,但不要忘记:SimpleDateFormat不是线程安全的(感谢Alan)