Es hat mich einiges an Arbeit gekostet, bis ich mal kapiert hatte, wie man mit time_t und tm* passende Uhrzeiten ausgeben kann, vor allem, wenn es noch GMT time sein soll, unabhängig von der Zeitzone des Users, aber irgendwann habe ich es doch begriffen.
Jetzt brauche ich das Ganze aber etwas extremer, weiss nicht mal genau wie ich es erklären soll.
Vielleicht am praktischen Beispiel:
Der Server steht in Australien, da soll ein Countdown über mehrere Wochen laufen.
Gestartet wird der Countdown von einem User, der in ein paar Eingabefeldern Datum und Uhrzeit eingeben soll.
Erstes Problem, mal angenommen der User sitzt in USA, und soll eine GMT Uhrzeit angeben, z.B. 1.1.2009 18::00.
Dann passt die Angabe erstmal nicht zur Zeitzone des Users, muss ich also umrechnen, und keine Ahnung wie.
Dann muss die Info an den Server gesendet und von da aus an sämtliche anderen Clients verteilt werden, so dass alle Clients unabhängig von ihrer Zeitzone die GMT time anzeigen, wann der Countdown abläuft, und wie lange noch bis dahin ist.
Mein Problem ist nur, über Socket sende ich char* also muss ich irgrendwie das Ganze zu einem string konvertieren.
Sende ich aber einem Client einen amerikanischen timestamp via einem australischen server, dann versagen meine Künste, oder kurz gesagt, ich stehe im Wald.
Versuche ich es andersrum, und verteile den fertigen GMT string, ohne irgendwas umzurechnen, dann habe ich zwar ein korrektes Ablaufatum samt Uhrzeit zum anzeigen, aber dann weiss ich nicht, wie ich aus dem string errechnen soll, wie lange noch bis dahin ist.
Obendrein weiss der Server dann nicht, wann die Zeit um ist und er eine bestimmte Funktion ausführen soll.
Ausgehend von meinem Code oben, kann ich zwar anzeigen, es ist jetzt GMT Zeit sowieso, der Countdown läuft ab zu GMT Zeit sowieso, aber wie errechne ich daraus die Differenz?
Hat jemand eine Idee, wie man das lösen kann?
Vermutlich mache ich es mir nur selber viel zu kompliziert.
Code:
time_t rawtime;
struct tm * timeinfo;
time(&rawtime);
timeinfo = gmtime(&rawtime);
char MyGMTime [80];
strftime(MyGMTime,80,"GMT Time: %H:%M:%S",timeinfo);
Jetzt brauche ich das Ganze aber etwas extremer, weiss nicht mal genau wie ich es erklären soll.
Vielleicht am praktischen Beispiel:
Der Server steht in Australien, da soll ein Countdown über mehrere Wochen laufen.
Gestartet wird der Countdown von einem User, der in ein paar Eingabefeldern Datum und Uhrzeit eingeben soll.
Erstes Problem, mal angenommen der User sitzt in USA, und soll eine GMT Uhrzeit angeben, z.B. 1.1.2009 18::00.
Dann passt die Angabe erstmal nicht zur Zeitzone des Users, muss ich also umrechnen, und keine Ahnung wie.
Dann muss die Info an den Server gesendet und von da aus an sämtliche anderen Clients verteilt werden, so dass alle Clients unabhängig von ihrer Zeitzone die GMT time anzeigen, wann der Countdown abläuft, und wie lange noch bis dahin ist.
Mein Problem ist nur, über Socket sende ich char* also muss ich irgrendwie das Ganze zu einem string konvertieren.
Sende ich aber einem Client einen amerikanischen timestamp via einem australischen server, dann versagen meine Künste, oder kurz gesagt, ich stehe im Wald.
Versuche ich es andersrum, und verteile den fertigen GMT string, ohne irgendwas umzurechnen, dann habe ich zwar ein korrektes Ablaufatum samt Uhrzeit zum anzeigen, aber dann weiss ich nicht, wie ich aus dem string errechnen soll, wie lange noch bis dahin ist.
Obendrein weiss der Server dann nicht, wann die Zeit um ist und er eine bestimmte Funktion ausführen soll.
Ausgehend von meinem Code oben, kann ich zwar anzeigen, es ist jetzt GMT Zeit sowieso, der Countdown läuft ab zu GMT Zeit sowieso, aber wie errechne ich daraus die Differenz?
Hat jemand eine Idee, wie man das lösen kann?
Vermutlich mache ich es mir nur selber viel zu kompliziert.