Hakawamu Geschrieben 20. September 2007 Geschrieben 20. September 2007 Hey Leute! Ich hab gerade versucht ueber die aktuelle Zeit auf eine bestimmte Zeitzone umzurechnen. Leider verschiebt sich das ganze um eine Stunde. Und ich weiss nicht warum. Hab auch schon viel mit der tm_isdst rumgespielt, aber es passiert rein garnichts. Jemand eine Idee? Bin fuer jeden Tipp offen Das OS auf dem die ganze Geschichte laeuft ist natuerlich GNU/Linux (derzeit 2.6.18.2). Es folgt nun der kleine Sourcecode und darunter der vom Programm generierte Output. #include <stdio.h> #include <time.h> #include <stdlib.h> int main(int argc, char *argv[]) { time_t mtime; struct tm mtmtime; tzset(); mtime = time(NULL); printf("Unixtime: %d\n", mtime); localtime_r(&mtime, &mtmtime); printf("localtime is: %4d-%02d-%02d %02d:%02d:%02d\n", mtmtime.tm_year+1900, mtmtime.tm_mon+1, mtmtime.tm_mday, mtmtime.tm_hour, mtmtime.tm_min, mtmtime.tm_sec); printf("Current timezone: %d minutes: %s %s\n\n", timezone, tzname[0], tzname[1]); setenv("TZ", "EST", 0); tzset(); mtime = time(NULL); printf("Unixtime: %d\n", mtime); localtime_r(&mtime, &mtmtime); printf("localtime is: %4d-%02d-%02d %02d:%02d:%02d\n", mtmtime.tm_year+1900, mtmtime.tm_mon+1, mtmtime.tm_mday, mtmtime.tm_hour, mtmtime.tm_min, mtmtime.tm_sec); printf("Current timezone: %d minutes: %s %s\n\n", timezone, tzname[0], tzname[1]); return 0; } [/PHP] Output: [code]Unixtime: 1190283998 localtime is: 2007-09-20 12:26:38 Current timezone: -3600 minutes: CET CEST Unixtime: 1190283998 localtime is: 2007-09-20 05:26:38 Current timezone: 18000 minutes: EST EST[/code] Zitieren
Klotzkopp Geschrieben 20. September 2007 Geschrieben 20. September 2007 Hab auch schon viel mit der tm_isdst rumgespielt, aber es passiert rein garnichts.Was heißt denn "rumgespielt"? tm_isdst sollte im ersten Fall 1 sein, im zweiten 0. Und dann passt doch alles, oder? Wenn nicht, beschreib doch mal, wie das Ergebnis deiner Meinung nach aussehen sollte. Zitieren
Hakawamu Geschrieben 20. September 2007 Autor Geschrieben 20. September 2007 Hab die tm_isdst gesetzt, so wie du meintest. habs auch schon mit deaktivieren versucht und mit so belassen wie es gesetzt wurde, aber es fuehrt zum gleichen ergebnis. Unixtime: 1190298986 localtime is: 2007-09-20 16:36:26 Current timezone: -3600 minutes: CET CEST Unixtime: 1190298986 localtime is: 2007-09-20 09:36:26 Current timezone: 18000 minutes: EST EST Das richtige Ergebnis sollte allerdings localtime is: 2007-09-20 10:36:26 und nicht localtime is: 2007-09-20 09:36:26 sein. Am System (Betriebssystem) kann es auch nicht liegen, da die KDE-Uhr auch 10:36:26 bei EST sagt und nicht 09:36:26 Zitieren
Klotzkopp Geschrieben 20. September 2007 Geschrieben 20. September 2007 Hab die tm_isdst gesetzt, so wie du meintest.Nein, du sollst tm_isdst nicht setzen. Es wird gesetzt, von localtime, so wie alle anderen Member von mtmtime. Zitieren
Hakawamu Geschrieben 20. September 2007 Autor Geschrieben 20. September 2007 Auch wenn ich es nicht setzte, kommt genau das gleiche falsche Ergebnis. Habs nur testweise nochmal eingefuegt, weil das Ergebnis eben genau um eine Stunde verschoben ist. Und danke erstmal fuer deine Antworten :-) Ich waer natuerlich auch fuer eine ganz andere Idee offen, die Zeit zu convertieren. Man koennt ja auch einfach 6 stunden abziehen, aber dann gibts wieder probleme mit der Daylight-saving-time. Zitieren
Klotzkopp Geschrieben 20. September 2007 Geschrieben 20. September 2007 Auch wenn ich es nicht setzte, kommt genau das gleiche falsche Ergebnis. Habs nur testweise nochmal eingefgt, weil das Ergebnis eben genau um eine Stunde verschoben ist.Kann es sein, dass du erwartest, dass bei deiner Vorgehensweise automatisch die Sommerzeitregelung für EST -> EDT angewendet wird? Dann musst du das auch so in TZ reinschreiben. Wenn du da "EST" ohne irgendwelche Sommerzeitregelungen reinschreibst, darfst du dich nicht wundern, wenn auch keinen Sommerzeitregelungen angewendet werden. Zitieren
Hakawamu Geschrieben 20. September 2007 Autor Geschrieben 20. September 2007 hm, okay ^^ da koennte das problem liegen. Wenn ich nun allerdings EDT nutze bekomm ich um 17:19:24 die zeit 15:19:24, welche der UTC entspricht. Scheint mir so, als ob er die nicht finden wuerde? O_o ... eigentlich wollt ich doch nur dem ganzen sommerzeit-quatsch vermeiden :-| Zitieren
Hakawamu Geschrieben 21. September 2007 Autor Geschrieben 21. September 2007 So, hier kommt jetzt die Loesung (Auch wenn das Problem eher mein Wissen ueber die Zeitzonen war). Ein netter Kollege hat mal nach der passenden Zeitzone geschaut. Man nehme die Zeitzone EST5EDT fuer die NewYorker Zeit mit Sommerzeitregelungen und schon gehts :-) Schoenen Dank an ihn und auch an den Klotzkopp. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.