amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > localtime() gmtime() sas/c [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2008-11-27, 19:44 h

selco
Posts: 64
User
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:%02dn",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


[ - Answer - Quote - Direct link - ]

2008-12-02, 10:20 h

Wishmaster
Posts: 140
User
@selco:

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

[ - Answer - Quote - Direct link - ]

2008-12-08, 09:12 h

gni
Posts: 1106
User
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.

[ - Answer - Quote - Direct link - ]

2008-12-08, 09:59 h

Thore
Posts: 2266
User
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

[ - Answer - Quote - Direct link - ]

2008-12-08, 13:25 h

selco
Posts: 64
User
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

[ - Answer - Quote - Direct link - ]

2008-12-08, 15:15 h

Wishmaster
Posts: 140
User
@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. ]

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > localtime() gmtime() sas/c [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.