mktime



  • Hallo,

    ich habe ein kleines Problem mit den Zeit-Funktionen von C++ (bzw. C).

    Gleich vorne weg: Ich kenne die Boot Time Library, kann/darf sie aber nicht nutzen.

    Also zum Problem. Ich möchte die aktuelle Zeit (time_t) in ein struct tm konvertieren, bearbeiten und dann wieder in ein time_t umwandeln. Das ganze soll GMT/UTC Zeit nutzen (siehe Code Beispiel).

    Kein Problem habe ich von time_t nach struct tm, da die Funktion gmtime genau das bietet was ich brauche.

    Wie funktioniert aber der Weg zurück? mktime nutzt nur die lokale Zeit. Gibt es keine Inverse Funktion zu gmtime, bzw. wie muss ich mktime nutzen, damit es mit GMT rechnet?

    Danke schon mal, Chris

    #include <iostream>
    #include <ctime>
    
    int main (int args, char **argv)
    {
      time_t current_time;
      time(&current_time);
    
      std::cout << "Current time_t value = " << current_time << std::endl;
      std::cout << "Current time : " << ctime(&current_time) << std::endl;
    
      struct tm* tmp_tm;
      tmp_tm = gmtime(&current_time);
    
      // Edit tmp_tm. In this example do nothing.
    
      current_time = mktime(tmp_tm);
    
      std::cout << "Current time_t value = " << current_time << std::endl;
      std::cout << "Current time : " << ctime(&current_time) << std::endl;
    }
    

    Output
    Current time_t value = 1221035298
    Current time : Wed Sep 10 10:28:18 2008

    Current time_t value = 1221031698 😞
    Current time : Wed Sep 10 09:28:18 2008



  • Hallo,

    es gibt, je nach System/(Entwicklungs-)Umgebung, (Nicht-Standard-)Erweiterungen der Laufzeitbibliothek, z.B.:

    http://msdn.microsoft.com/en-us/library/2093ets1.aspx

    MfG,

    Probe-Nutzer



  • Genau den "Nicht-Standard-" will ich eigentlich vermeiden. Das muss die Sprache C++ doch irgendwie hergeben...

    Gruß, Chris



  • Nun, dann musst du das selber ausrechnen, die Differenz zwischen gmtime und localtime sollte meiner Meinung nach eine portable Möglichkeit sein. Um das (Portabilität) abzusichern, habe ich noch das hier:

    http://bytes.com/forum/post239975-2.html

    gefunden.

    MfG,

    Probe-Nutzer


Anmelden zum Antworten