我创建了一个计数定时器函数,用于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();
}
答案 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