Portal > Foren > Java > Allgemeine Java-Programmierung > Uhrzeit geht voraus
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 07.07.2005, 14:38 Nach oben    #1
miguelgalaxy
Gast
 
Beiträge: n/a
Standard Uhrzeit geht voraus

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);
}
}
ich dachte mir, dass wenn ich jedesmal wenn ich etwas berechnen muss, dass ich cal = new GregorianCalendar() aufrufe, damit ich die aktuelle zeit und das aktuelle datum habe.
vom client aus rufe ich alle 6 sekunden die methode getActuallyTime auf.

weiss jemand wo das problem liegt?
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.07.2005, 15:27 Nach oben    #2
matt
Gast
 
Beiträge: n/a
Standard

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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Programm - PC um gewisse Uhrzeit runterfahren Neq' Gesuche 2 27.10.2006 14:20


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45