Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Zeitconvertierung (zeitzonen) in C

Empfohlene Antworten

Veröffentlicht

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]

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.

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

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.

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.

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 :-|

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.