C ++ time_t Problem

8

Ich habe Probleme mit der Datenverwaltung in C ++ (VS 2008).

Laut den MSDN-Spezifikationen steht time_t :

Die Anzahl der Sekunden seit dem 1. Januar 1970, 0:00 UTC

Deshalb habe ich diesen Code geschrieben:

%Vor%

Es scheint um 1 Stunde verschoben zu sein (d. h. die Nullzeit ist der 1. Januar 1970, 1:00 UTC).

Anfangs dachte ich, das Problem könnte durch das DayLightSaving-Flag entstehen, aber es ändert sich nicht, wenn ich es ändere.

Mache ich etwas falsch?

Vielen Dank im Voraus

P.S. Theoretisch mag ich den Wert der Nullzeit nicht beachten, weil es nur eine Referenzzeit ist.

Aber ich muss mich über den Wert sicher sein, denn ich portiere den Code in eine andere Sprache und muss genau die gleichen Ergebnisse erzielen.

BEARBEITEN:

Hier ist die Lösung, dank Josh Kelley Antwort

%Vor%     
digEmAll 07.09.2010, 17:16
quelle

2 Antworten

8

mktime nimmt eine struct tm , gibt eine lokale Zeit und gibt die Anzahl der Sekunden seit dem 1. Januar 1970, 0:00 UTC zurück. Daher gibt Ihr GetDate(1970,1,1,0,0,0); -Aufruf 0 zurück, wenn Ihre lokale Zeitzone UTC ist, aber andere Werte für andere Zeitzonen.

Bearbeiten: Versuchen Sie für eine UTC-Version von mktime oder GetDate Folgendes (ungetestet):

  1. Rufen Sie getenv auf, um den aktuellen Wert zu speichern der TZ-Umgebungsvariablen (falls vorhanden).
  2. Rufen Sie putenv auf, um die TZ-Umgebung zu ändern Variable zu "UTC".
  3. Rufen Sie _tzset auf, um Ihre Änderungen zu aktivieren.
  4. Rufen Sie mktime .
  5. auf
  6. Den alten Wert von TZ wiederherstellen und dann _tzset erneut aufrufen.
Josh Kelley 07.09.2010, 17:34
quelle
1

Nur ein WAG, aber versuchen Sie Folgendes:

%Vor%     
Hogan 07.09.2010 17:21
quelle

Tags und Links