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:%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 [ - 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: 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 © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |