나는 과거와 다른 시간에 재생할 수있는 클럭으로 작동하는 클래스가 있습니다. 아래의 예제 코드에서는 60x에서 재생 중입니다.자바 : 시간 드리프트
나는 10 초마다 시간이 흐르지 만 나는 그것에 대처하는 방법을 알고있다. 당신이 "초"에서 볼 수 있듯이
Tue May 04 04:04:04 PDT 2010
Tue May 04 04:05:06 PDT 2010
Tue May 04 04:06:06 PDT 2010
Tue May 04 04:07:06 PDT 2010
Tue May 04 04:08:06 PDT 2010
Tue May 04 04:09:06 PDT 2010
Tue May 04 04:10:06 PDT 2010
Tue May 04 04:11:06 PDT 2010
Tue May 04 04:12:06 PDT 2010
Tue May 04 04:13:07 PDT 2010
Tue May 04 04:14:07 PDT 2010
Tue May 04 04:15:07 PDT 2010
Tue May 04 04:16:07 PDT 2010
Tue May 04 04:17:07 PDT 2010
Tue May 04 04:18:07 PDT 2010
Tue May 04 04:19:07 PDT 2010
Tue May 04 04:20:07 PDT 2010
Tue May 04 04:21:07 PDT 2010
Tue May 04 04:22:07 PDT 2010
Tue May 04 04:23:08 PDT 2010
Tue May 04 04:24:08 PDT 2010
이 감도는 : 여기
import java.util.Calendar;
public class Clock {
long delta;
long lastCalledTime;
long startingTime;
private float speed = 1f;
public synchronized long getAdjustedTimeMillis() {
long time = (System.currentTimeMillis() - (delta));
long val = (startingTime + (long) ((time - lastCalledTime) * speed));
return val;
}
public synchronized void setPlaybackSpeedFromTime(float speed, long startingTime) {
this.startingTime = startingTime;
this.delta = System.currentTimeMillis() - startingTime;
this.speed = speed;
this.lastCalledTime = System.currentTimeMillis() - delta;
}
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2010, 4, 4, 4, 4, 4);
Clock clock = new Clock();
clock.setPlaybackSpeedFromTime(60f, calendar.getTimeInMillis());
for (int i = 0; i < 1000; i++) {
calendar.setTimeInMillis(clock.getAdjustedTimeMillis());
System.out.println(calendar.getTime());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
는 내가 갖는 출력입니다. 내가 원하는 건 다음과 같습니다.
Tue May 04 04:04:04 PDT 2010
Tue May 04 04:05:04 PDT 2010
Tue May 04 04:06:04 PDT 2010
Tue May 04 04:07:04 PDT 2010
Tue May 04 04:08:04 PDT 2010
Tue May 04 04:09:04 PDT 2010
Tue May 04 04:10:04 PDT 2010
Tue May 04 04:11:04 PDT 2010
Tue May 04 04:12:04 PDT 2010
Tue May 04 04:13:04 PDT 2010
Tue May 04 04:14:04 PDT 2010
Tue May 04 04:15:04 PDT 2010
Tue May 04 04:16:04 PDT 2010
Tue May 04 04:17:04 PDT 2010
Tue May 04 04:18:04 PDT 2010
Tue May 04 04:19:04 PDT 2010
Tue May 04 04:20:04 PDT 2010
Tue May 04 04:21:04 PDT 2010
Tue May 04 04:22:04 PDT 2010
Tue May 04 04:23:04 PDT 2010
Tue May 04 04:24:04 PDT 2010
글쎄,이 문제는 충분히 간단합니다. Thread.sleep은 정확한 함수가 아니며 많은 (많은) 반복을 처리하는 처리 시간도 고려하지 않습니다. 하지만 어떻게 해결해야할지 모르겠다. – Alex