这是我的问题。我正在努力制作一个程序,以秒或分钟为单位计算到下一年(分钟到小数点后1位,秒到无),我得到这个问题,倒计时与系统时间有点不同步。它不是太多,只有大约半秒钟,但个人这让我很烦恼。当我看到计算机上的时钟时,我注意到了这一点,并且,确定,我添加了一个System.out.println()
调用来输出倒计时的数字和实际时间。这是我的代码:
import java.util.Calendar;
import java.util.GregorianCalendar;
Calendar currentTime;
Calendar newYear;
int nextYear;
boolean isFullScreen = false;
boolean minutes = false;
void settings() {
if(isFullScreen) {
fullScreen();
} else {
size(500, 250);
}
}
void setup() {
frameRate(60);
}
void draw() {
background(255, 0, 0);
currentTime = Calendar.getInstance();
nextYear = currentTime.get(Calendar.YEAR) + 1;
newYear = new GregorianCalendar(nextYear, 1, 1, 0, 0, 0);
textAlign(CENTER, CENTER);
fill(0);
if(isFullScreen) {
textSize(200);
} else {
textSize(50);
}
long timeInMillis = currentTime.getTimeInMillis();
long newYearInMillis = newYear.getTimeInMillis();
if(minutes) {
text(String.valueOf((float)ceil((float)(newYearInMillis - timeInMillis)/6000)/10), width/2, height/2);
} else {
System.out.println(String.valueOf(ceil((float)(newYearInMillis - timeInMillis)/1000)) + ", " + currentTime.get(Calendar.SECOND));
text(String.valueOf(ceil((float)(newYearInMillis - timeInMillis)/1000)), width/2, height/2);
}
}
void mouseClicked() {
minutes = !minutes;
}
我得到的输出没有意义:
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666570, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 10
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
5666569, 11
请注意倒计时认为它应该在实际时间之前倒数28帧。虽然这不是很大,但它不仅可以引人注目,而且可以让我们想知道问题是什么。
答案 0 :(得分:0)
首先,不要依赖System.out.println()
来计时。它比其他输出慢得多,因此打印语句落后于屏幕时间是正常的。
话虽如此,该计划正在按照您的要求行事 - 将时间向上四舍五入到下一秒。这就是为什么你的屏幕时间比实时提前半秒的原因。
停止使用ceil()
功能,您的时间将与系统时间非常接近:
text(String.valueOf((newYearInMillis - timeInMillis)/1000), width/2, height/2);
另外,我不确定你的所有逻辑是否正确。例如,GregorianCalendar
个月从零开始,因此1月应为0,而不是1。