amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > localtime() gmtime() sas/c [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

27.11.2008, 19:44 Uhr

selco
Posts: 64
Nutzer
Hi,
ich bin gerade über ein Zeitproblem gestoßen...

Ich habe in Prefs/Locale (OS3.9) die Zeitzone für Deutschland eingestellt. ("1 Stunde auf GMT") und in prefs/time die Zeit richtig gestellt.

Jetzt habe ich ein Programm, welches die Zeit braucht.

time_t timer;
struct tm *tm;

time(&timer);

tm=localtime(&timer);

printf("%2d:%02d:%02d\n",tm->tm_hour,
tm->tm_min,
tm->tm_sec);

Das bringt die Ausschrift "19:17:15", (so spät ist es auch wirklich gerade) Also OK.

Ich bracuhe aber GMT, also verwende ich statt localtime() die Funktion gmtime()

Das bringt die Ausschrift "1:17:39", liegt also ein paar Stunden danben. Ich hätte 18:17 erwartet, also eine Stunde weniger, statt dessen bekomme ich 5 Stunden mehr???

Mache ich etwas falsch? Hat SAS/C da einen Fehler? Wenn ja, gibt es einen workaround oder patch? Gibt es einen offiziellen Weg, das richtig zumachen?


MfG selco, http://selco.da.ru


[ - Antworten - Zitieren - Direktlink - ]

02.12.2008, 10:20 Uhr

Wishmaster
Posts: 140
Nutzer
@selco:

Da ich SAS/C nicht nutze, kann ich nichts Genaues dazu sagen.
Vielleicht musst du irgenwdie die Zeitzone einstellen.
--
Pegasos MorphOS

[ - Antworten - Zitieren - Direktlink - ]

08.12.2008, 09:12 Uhr

gni
Posts: 1106
Nutzer
Zitat:
selco:
Ich bracuhe aber GMT, also verwende ich statt localtime() die Funktion gmtime()

Das bringt die Ausschrift "1:17:39", liegt also ein paar Stunden danben. Ich hätte 18:17 erwartet, also eine Stunde weniger, statt dessen bekomme ich 5 Stunden mehr???

Mache ich etwas falsch? Hat SAS/C da einen Fehler? Wenn ja, gibt es einen workaround oder patch? Gibt es einen offiziellen Weg, das richtig zumachen?


Du hast keine globale Umgebungsvariable TZ gesetzt, deshalb bekommst Du den SAS/C Defaultwert für _TZ. Das steht alles im Guide unter Zeitfunktionen/tzset.

[ - Antworten - Zitieren - Direktlink - ]

08.12.2008, 09:59 Uhr

Thore
Posts: 2266
Nutzer
Um die Variable TZ zu setzen machst Du folgendes:
Beispiel:
setenv TZ EST+05

wobei es folgende Kürzel gibt:
EST = Eastern Standard Time
EDT = Eastern Daylight Time
CST = Central Standard Time
CDT = Central Daylight Time

Möglicheriweise ist es egal welchen string man angibt, aber das Offset ist ausschlaggebend.

Stimmt die Zeit dann, kopier die Env-Variable:
copy ENV:TZ ENVARC:

(Anleitung aus Moontool entnommen)b

[ - Antworten - Zitieren - Direktlink - ]

08.12.2008, 13:25 Uhr

selco
Posts: 64
Nutzer
In welcehm Guide steht die TZ-Erklärung?
@Thore:
OK, Danke für den Tip. Trotzdem... Wir haben auf dem Amiga den "Landes-Voreinsteller (Locale)" auf dem die Zeitzone auf der Landkarte angeklickt wird. Und dann soll anschließen noch per hand eine Umgebungsvarianle gesetzt werden??? Find ich nicht gut ;-)

Ich habe jetzt folgende Funktion für SAS/C gebaut, die den Offset zu GMT aus den Locale-Prefs holt.

Kommentare sind willkommen!



struct tm *gmtime(const time_t *timer)
{
if(timer)
{
struct LocaleBase *LocaleBase;
ULONG GMTOffset;
time_t when=*timer;

if ((LocaleBase=(struct LocaleBase *)OpenLibrary("locale.library",38L)) != NULL)
{
GMTOffset = 60*(OpenLocale(NULL))->loc_GMTOffset;
CloseLibrary((struct Library *)LocaleBase);
}
else
{
GMTOffset=0; // ok, assume GMT
}

when+=GMTOffset;

return localtime(&when);
}
else
{
return NULL;
}
}



MfG selco, http://selco.da.ru

[ - Antworten - Zitieren - Direktlink - ]

08.12.2008, 15:15 Uhr

Wishmaster
Posts: 140
Nutzer
@selco:

Locale berücksichtigt die Sommerzeit nicht.
Die TZ-Variable wird daher auch von Sommerzeit-Tools, wie SetDST, verwendet.
Setze die Variable auf setenv save TZ CET-1 und installiere SetDST.
Wozu selber eine Funktion bauen, wenn SAS/C schon eine hat?
--
Pegasos MorphOS

[ Dieser Beitrag wurde von Wishmaster am 08.12.2008 um 15:21 Uhr geändert. ]

[ Dieser Beitrag wurde von Wishmaster am 08.12.2008 um 15:22 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > localtime() gmtime() sas/c [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.