![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Gast
Beiträge: n/a
|
hy, ich hole mir die aktuelle uhrzeit von einem gregoriancalendar objekt. nun kann der user die uhrzeit und das datum selber einstellen. wenn er die methode setTime aufruft, berechne ich die differenz von jahr,monat,tag des monats, stunde, minute und sekunde aus zwischen dem jetztigen zeitpunkt und des zeitpunkts an welchem der user die zeit einstellt. und wenn der user die zeit selber eingestellt hat, dann ist die boolean variable timeIsSetted auf true. wenn der user nun die zeit abfragt, dann zieht die methode getActuallyTime zuerst die differenz von der jetzigen zeit ab, oder zählt sie hinzu. nun, leider läuft die uhr plötzlich voraus, da komischerweise eine minute nur ca. 58 sekunden dauert. ich habe es folgendermassen gemacht,aber ich weiss nicht wo das problem mit dem Vorauslaufen liegt? Code:
public final class QcsTime {
public static boolean threadIsRunning = true;
private GuiTime_ret str_GuiTime_ret = new GuiTime_ret();
private GuiTime str_GuiTime = new GuiTime();
private GuiTime str_GuiTime_diff;
private Timer timer;
private GregorianCalendar cal;
private boolean timeIsSetted = false;
private TimerTask timerTask = new TimerTask() {
/**
* run
*/
public void run() {
cal = new GregorianCalendar();
}
};
public QcsTime() {
cal = new GregorianCalendar();
timer = new Timer();
str_GuiTime_diff = new GuiTime();
}
public GuiTime getActuallyTime() {
cal = new GregorianCalendar();
if (timeIsSetted == true) {
str_GuiTime.year = cal.get(Calendar.YEAR) + str_GuiTime_diff.year;
str_GuiTime.mon = cal.get(Calendar.MONTH) + str_GuiTime_diff.mon;
str_GuiTime.day = cal.get(Calendar.DAY_OF_MONTH) + str_GuiTime_diff.day;
str_GuiTime.hour = cal.get(Calendar.HOUR) + str_GuiTime_diff.hour;
str_GuiTime.min = cal.get(Calendar.MINUTE) + str_GuiTime_diff.min;
str_GuiTime.sec = cal.get(Calendar.SECOND) + str_GuiTime_diff.sec;
}
else {
str_GuiTime.year = cal.get(Calendar.YEAR);
str_GuiTime.mon = cal.get(Calendar.MONTH);
str_GuiTime.day = cal.get(Calendar.DAY_OF_MONTH);
str_GuiTime.hour = cal.get(Calendar.HOUR);
str_GuiTime.min = cal.get(Calendar.MINUTE);
str_GuiTime.sec = cal.get(Calendar.SECOND);
}
return str_GuiTime;
}
public void setTime(GuiTime_set s) {
timeIsSetted = true;
calculateDiff(s.data);
}
public void startTimer() {
timer.schedule(timerTask, 0, 1000L);
}
public void cancelTimer() {
timer.cancel();
}
private void calculateDiff(GuiTime s) {
cal = new GregorianCalendar();
str_GuiTime_diff.year = s.year - cal.get(Calendar.YEAR);
str_GuiTime_diff.mon = s.mon - cal.get(Calendar.MONTH);
str_GuiTime_diff.day = s.day - cal.get(Calendar.DAY_OF_MONTH);
str_GuiTime_diff.hour = s.hour - cal.get(Calendar.HOUR);
str_GuiTime_diff.min = s.min - cal.get(Calendar.MINUTE);
str_GuiTime_diff.sec = s.sec - cal.get(Calendar.SECOND);
}
}
vom client aus rufe ich alle 6 sekunden die methode getActuallyTime auf. weiss jemand wo das problem liegt? |
|
| | Nach oben #2 |
| Gast
Beiträge: n/a
|
hm, probier es mal anders: Hol dir System.getTimeInMillis() die anzahl der Millisekunden seit dem 1. Januar 1970. Dann addierst du dein offset dazu und erzeugst ein neues Calendar bzw. GregorianCalendar Objekt. Bei diesem rufst du dann die Methode setTimeInMillis(System.getTimeInMillis+secondOffse t*1000) auf. Das sollte dein problem beheben, denke ich mal |
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Programm - PC um gewisse Uhrzeit runterfahren | Neq' | Gesuche | 2 | 27.10.2006 14:20 |