Am 21.02.2005 um 11:54 schrieb Bernard.Bramlage@kisters.de:
Am 21.02.2005 12:39:32 schrieb Bernard.Bramlage:
moin, ich versuche mit einem Programm in C, C++ oder Perl festzustellen welche Zeitzone mit YAST für das System festgelegt wurde. Ich habe z.B in YAST die Zeitzone Australia/Canberra ausgewählt. Ich nehme an, dass YAST dann die Datei /etc/localtime /usr/share/zoneinfo/Australia/Canberra nach /etc/localtime kopiert. Leider gibt das Kommando date dann als Zeitzonenkürzel EST heraus. Dies ist aber ein Kürzel für verschieden Zeitzonen, z.B. die Eastern Standard Time in den Vereinigten Staaten. In der Datei /etc/localtime finde ich auch keinen Hinweis, dass es sich um die Zeitzonen Australia/Canberra handelt.
Hier bei mir ist /etc/localtime ein symbolischer Link auf /usr/share/zoneinfo/Europe/Berlin .
Wie kann ich also nach der Einstellung mit YAST mit einem Programm feststellen welche Zeitzonen ausgewählt wurde.
um festzustellen welche Zeitzone auf dem System eingestellt wurde, kann man sich die Datei clock ansehen Der Befehl "cat /etc/sysconfig/clock | grep ^TIMEZONE" liefert dann den korrekten Eintrag
Dein Weg mag für SuSE-Systeme funktionieren. Auf anderen Systemen muss /etc/sysconfig/clock nicht existieren oder kann ein anderes Format haben. Außerdem kann jeder Benutzer deines Systems durch die Umgebungsvariable $TZ angeben, in Zeiten welcher Zeitzone seine Programme Zeiten anzeigen sollen. Wenn dein Programm später nicht nur auf deinem SuSE-System laufen soll, dann schau dir mal die Manual pages zu localtime, gmtime und Konsorten an. Wenn dein Programm mit Zeitzonen arbeitet, solltest du (üblicher- weise) tunlichst _nicht_ versuchen, selber Zeiten umzurechnen, sondern die entsprechenden Bibliotheksfunktionen dafür benutzen. In Perl kannst du den Unterschied zu UTC mit "tz_local_offset()" im Modul "Time::Zone" abfragen. In C beispielsweise so: #include <time.h> extern long timezone; int main( ... ) { tzset(); printf("%d Sekunden westlich von Greenwich\n", timezone) } Gruß, Dennis