Sowohl ftime als auch gettimeofday geben 0 für die aktuelle Zeitzone in Ubuntu 16 zurück. Die Zeitzone ist in den von Ubuntu bereitgestellten Einstellungen für Datum und Uhrzeit richtig eingestellt. Es ist keine TZ env-Variable festgelegt.Warum ist die Zeitzone des Tages falsch?
Ich möchte nicht nur "reparieren", weil dies Produktionssoftware in vielen verschiedenen Kontexten verwendet wird. Daher möchte ich nur eine zuverlässige Möglichkeit, die Zeitzone programmatisch zu erhalten (und vorzugsweise auch den aktuellen DST-Offset).
Meine Versuche bisher:
#if 0
timeb tbTime;
ftime(&tbTime);
int CurTz = -tbTime.timezone;
#else
struct timeval tv;
struct timezone tz;
int r = gettimeofday(&tv, &tz);
if (r)
return NO_ZONE;
int CurTz = tz.tz_minuteswest;
#endif
Der ‚date‘ Befehl funktioniert:
[email protected]:~$ date +%Z
AEDT
[email protected]:~$ date +%z
+1100
ich nur könnte einen Prozess erzeugen „date“ zu nennen, aber das scheint sehr plump, wenn Einige API-Aufrufe sind verfügbar.
Das funktioniert für mich richtig (kein TZ env definiert auch). Getestet auf OSX. –
Wahrscheinlich, weil verschiedene Systeme unterschiedliche Einstellungen haben. Dieser Code funktioniert beispielsweise unter Windows einwandfrei. Und vielleicht ist mein Ubuntu irgendwie kaputt? Aber ich muss es auf ähnlichen "busted" -Systemen draußen auf dem Gebiet arbeiten lassen. – fret