boost::local_time => Somer- und Winterzeit



  • Hallo zusammen,
    ich hab mal ne Frage zu der Lokalzeitberechung, wie sie von boost::local_time durchgeführt wird.

    Wenn ich in ein local_time Objekt den "26.10.2008 0:0:0" reinstecke und dann um einen Tag weitergehe, lande ich nicht wie von mir erwartet, beim "27.10.2008 0:0:0", sondern bei "26.10.2008 23:0:0".
    Scheinbar hat das "local_time" Objekt den Zeitwechsel erkannt und von meinem Tag die eine Stunde Differenz zwischen Sommer- und Winterzeit abgezogen.
    Für alle die das mal ausprobieren möchten, hier ein kleines Beispiel:

    #include <iostream>
    #include <boost/date_time/local_time/local_time.hpp>
    #include <boost/date_time/posix_time/posix_time.hpp>
    #include <boost/date_time/date.hpp>
    #include <boost/date_time/date_duration.hpp>
    #include <boost/date_time/time_duration.hpp>
    #include <boost/date_time/gregorian/greg_duration_types.hpp>
    #include <boost/date_time/local_time/local_time.hpp>
    
    int main()
    {
        boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone("CET+01CEST+01,M3.5.0/02:00,M10.5.0/03:00"));
        boost::local_time::local_date_time localtime(boost::gregorian::date(2008, 10, 26),
                                                     boost::posix_time::time_duration(0, 0, 0),
                                                     zone, true);
    
        /// Ausgabe: 2008-Oct-26 00:00:00 CEST
        std::cout << localtime << std::endl;
    
        /// Hier einen Tag hochzählen
        localtime += boost::gregorian::days(1);
    
        /// Nun ist die Ausgabe: 2008-Oct-26 23:00:00 CET
        std::cout << localtime << std::endl;
    }
    

    Mach ich nun einen Denkfehler?
    Mir kann doch schnuppe sein, ob in den 24 Stunden, die ich weiterwandere ein Zeitwechsel bevorsteht.
    Ich will doch den "27.10.2008 0:0:0" haben.

    Weiß jemand, wie man dieses "Feature" deaktivieren kann?
    Es wäre natürlich genauso gut, wenn mir jemand sagen könnte, wo mein Denkfehler ist, falls ich einen gemacht habe.

    Bis dann,

    Bastian


Anmelden zum Antworten