sekunden formatieren



  • hi,

    gibts ne funktion die mir aus zum beispiel 80 sekunden sowas hier macht: 00:01:20 ?



  • TDateTime::FormatString



  • TDateTime formatiert Zeitstempel, aber du kannst dir doch fix was eigenes basteln:

    #include <string>
    #include <iostream>
    #include <sstream>
    #include <iomanip>
    
    std::string format_timespan( unsigned int Duration )
    {
       std::ostringstream oss;
       oss << std::setfill( '0' )
           << std::setw( 2 ) << (Duration/3600) % 3600 << ":"
           << std::setw( 2 ) << (Duration/60) % 60 << ":"
           << std::setw( 2 ) << Duration % 60;
       return oss.str();
    }
    


  • Mit TDateTime ?
    wie gehtn das ?



  • Mal in die Hilfe schauen



  • Mit TDateTime komm ich nicht mit klar selbst wenn mein Programm muss auch über 24 Stunden hinaus anzeigen können also 25:59:59. Ja und das geht dann wohl nur mit dem Beispiel von DocShoe. So eine Lösung hatte ich bereits aber es hätte ja sein können das es noch was anderes gibt.

    TDateTime begrenzt soweit ich es mitbekommen habe auf 23:59:59 ist das richtig ?
    "TDateTime zählt die Tage seit dem 30.12.1899" kann ich also nix mit anfangen.

    Der früheste Zeitpunkt, der gespeichert werden kann, in der Regel date time.time(0, 0, 0, 0).

    Der späteste darstellbare Zeitpunkt, in der Regel datetime.time(23, 59, 59, 999999).

    naja was solls muss ich nicht verstehen!



  • TDateTime::FormatString
    oder
    http://www.cplusplus.com/reference/clibrary/ctime/strftime/
    oder
    selber schreiben ...



  • Schade das hier keiner wirklich in der Lage ist aus 80 sekunden mit TDateTime sowas zu machen -> 00:01:20.

    TDateTime test;
    test = 80; //?????????????????????????????ß
    ShowMessage(test.FormatString(?????));
    


  • Rüffel schrieb:

    Schade das hier keiner wirklich in der Lage ist aus 80 sekunden mit TDateTime sowas zu machen -> 00:01:20.

    TDateTime test;
    test = 80; //?????????????????????????????ß
    ShowMessage(test.FormatString(?????));
    

    Schade, dass hier einer keine bereits fertige Lösungen versteht.



  • Teile die 80 sek durch 60, dann kriegste die Minuten. Ziehe von dem 80 sek die Minuten*60 ab, dann haste die restlichen Sekunden.

    Viel spass beim schreiben so einer (sehr simplen) Funktion.



  • Hallo

    Und genau das hat DocShoe schon getan. Es gibt also eigentlich nichts mehr dazu zu sagen. Rüffel sollte lieber vor dem Posten nochmal nachdenken, anstatt anderen hier Unwissen nachzusagen.

    bis bald
    akari



  • Und mit TDateTime sollte das auch funktionieren. Man muß nur die 80 Sekunden ins TDateTime-Format umrechnen...

    double Sekunden = 80.0;
    	TDateTime dtTest; // Vorkomma ganze Tage, Nachkomma Stunde Minute Sekunde als Bruchteil eines ganzen Tages
    	double timeval = 1.0 / (24.0 * 60.0 * 60.0) * Sekunden;
    	dtTest.Val = timeval;
    	AnsiString Ergebnis = dtTest.TimeString();
    

    Allerdings ist die Ausgabe natürlich HH:MM:SS...



  • Hallo

    Oder man rechnet wie DocShoe die Sekunden in h/m/s um und verwendet den Konstruktor TDateTime(unsigned short hour, unsigned short min, unsigned short sec, unsigned short msec).

    bis bald
    akari



  • @All

    Also wenn jemand schreibt mit TDateTime geht das dann hätte ich echt erwartet das da auch ma jemand ne Lösung zu anbietet. Einer hats ja nun hinbekommen. Unglaublich!

    Zur Lösung von DocShoe schrieb ich das ich diese schon kenne und auch selber benutze. Ich wollte wissen ob es auch anders geht denn an sowas bin ich immer interessiert.

    @Deleted User
    Danke!



  • ne Lösung anbieten?
    Keine Lust mal selbst nachzudenken und lieber alles vorgekaut zu bekommen? Es wurde doch auf die Hilfe verwiesen - dort steht alles relevante drin.
    Die wenigsten hier im Forum warten permanent darauf, Probleme anderer Leute lösen zu dürfen (übrigens für lau!) - selbst wenn es so derart triviale wie in Deinem Falle sind.



  • Hallo

    Da das eigentliche Thema ja nun geklärt ist, und bevor das hier sich weiter unnötig aufbauscht, mache ich hier zu.

    bis bald
    akari


Anmelden zum Antworten