Zum Inhalt springen

Zeitconvertierung (zeitzonen) in C


Hakawamu

Empfohlene Beiträge

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]

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...