Aktuelle Uhrzeit == Sommerzeit oder Standardzeit/Winderzeit?



  • Hallo zusammen,

    ich bin noch relativ neu in C++ und möchte in einem kleinen Programm ermitteln, ob bei der aktuellen Zeit die Sommerzeitkonvertierung verwendet wurde (aktuelle Zeit == Sommerzeit) oder nicht (aktuelle Zeit == Standardzeit). Als Entwicklungsumgebung verwende ich Borland's den C++ Builder 6.

    Mein Code sieht bisher wie folgt aus:

    //Variablen
    struct tm *pZeitstruktur;
    time_t AktuelleZeit;
    char Test[1];
    
    //Main-Funktion
    int main(void)
    {
       while (Test[0] != 'a'){
          puts("*** System in Sommerzeit oder Winterzeit? ***");
          AktuelleZeit = time(NULL);                  //Aktuelle Systemzeit ermitteln
          pZeitstruktur = localtime(&AktuelleZeit);   //Aktuelle Systemzeit in Struktur umwandeln
          cout << pZeitstruktur->tm_isdst;            //Sommerzeit-Flag auslesen 
          cin >> Test[0];
       }
       return( 0 );
    }
    

    Das Problem an der ganzen Geschichte ist leider, dass die Zeitumstellung jeweils nicht richtig erfasst wird:
    - Bei Sommerzeit -> Standardzeit wird tm_isdst schon um 2 Uhr Sommerzeit und nicht erst um 2 Uhr Standardzeit auf 0 umgestelt.
    - Bei Standardzeit -> Sommerzeit wird erst am 5. April tm_isdst auf Sommerzeit/1 gesetzt. Das wäre gemäß einer alten US Regelung, die mittlerweile aber auch geändert wurde.

    Windows führt die Zeitumstellung und die Anzeige MESZ/MEZ richtig durch. Die Einträge hierfür in der Registry stimmen. Ich habe obenstehenden Code getestet, indem ich in Windows einfach immer die Uhrzeit geändert habe.

    Hat jemand eine Idee, was ich noch falsch mache? Vielen Dank und allen einen entspannten Sonntag.

    Gruß vom alten Bauer



  • Hast du dein Windows voll gepatcht?
    Also alle Updates usw ?
    Und: Welches Windows haste: 2k, XP Vista, ... ?

    Ansonsten:

    struct tm *pZeitstruktur;
    

    ist C, in C++ schriebt man das ohne struct

    tm *pZeitstruktur;
    

    bzw. noch korrekter nach dem standard wäre: (dann hiese der include header aber auch nicht <time.h> sondern <ctime> )

    // #include <time.h>
    // wird zu:
    #include <ctime>
    // und der Code
    std::tm *pZeitstruktur;
    

    Evtl. sollte man den Speicher noch gleich aufm Heap allokieren:

    std::tm *pZeitstruktur = new std::tm();
    

    Evtl liegt das Problem aber auch nicht an Windows sondern an der Borland Runtime.
    Tipp also: Verwende einen aktuellen Compiler (gäbs auch von Borland),
    der Standardkompatibel ist:
    - Borland/Codegear 2009(gibt afaik eine kostenlose Personal Edition)
    - GCC mit einem Editor oder einer IDE z.b. Code::Blocks
    - Microsft VisualC++ 2008, die Express Edition gibts kostenlos von Microsoft

    mit freundlichen grüßen,
    branleb


Anmelden zum Antworten