tage -> stunden....
-
ich habe aus getickcount() die millisekunden seit dem letzten bootvorgang...
ich kann diesen wert umwandeln nach tage z.b. 0,876 Tage...
wie kann ich diesen dword typ aufdröseln nach x d, x h, x min, x s....?
ich kann die 0,876 mit 24 multiplizieren dann hab i stunden (21,024)...
jetzt müssen die 21 weg also 0,024*60 um auf minuten zu kommen usw....weiss jemand ne gute funktion dies zu realisieren.... ohne aufwendige schleifen etc....
-
ehm kannst entweder nen timestamp draus machen und dann die ctime-Funktionen nutzen und ansonsten einfach in einen integer casten und den dann wieder in double. Die Differenz von Ausgangszahl und gecasteter Zahl ist dann bei deinem Beispiel 0.024 ...
-
das ist eigentlich ne gute idee....
geht das wenn i sage
double day;
int tage = int (days);
double tage;
-
Ehm hab es dir jetzt mal so das du es entschlüsseln kannst (also ganz unoptimiert) aufgeschrieben ...
struct lasttime { unsigned char day; unsigned char hour; unsigned char min; unsigned char sec; unsigned char ms; }; void calculate_lasttime(unsigned long ms, lasttime& dest) { dest.day = static_cast<unsigned char>(ms / (1000 * 60 * 60 * 24)); ms -= dest.day * (1000 * 60 * 60 * 24); dest.hour = static_cast<unsigned char>(ms / (1000 * 60 * 60)); ms -= dest.hour * (1000 * 60 * 60); dest.min = static_cast<unsigned char>(ms / (1000 * 60)); ms -= dest.min * (1000 * 60); dest.sec = static_cast<unsigned char>(ms / (1000)); dest.ms = ms - dest.sec * (1000); }...
aja:
struct lasttime { unsigned char day; unsigned char hour; unsigned char min; unsigned char sec; unsigned char ms; lasttime(unsigned char day, unsigned char hour, unsigned char min, unsigned char sec, unsigned char ms) : day(day), hour(hour), min(min), sec(sec), ms(ms) {} friend std::ostream& operator<<(std::ostream& out, const lasttime& last) { out << static_cast<unsigned short>(day) << "d " << static_cast<unsigned short>(hour) << "h " << static_cast<unsigned short>(min) << "min " << static_cast<unsigned short>(sec) << "s " << static_cast<unsigned short>(ms) << "ms"; return out; } std::string str() const { std::ostringstream ss; ss << *this; return ss.str(); } }; void calculate_lasttime(unsigned long ms, lasttime& dest) { dest.day = static_cast<unsigned char>(ms / 86400000); ms -= dest.day * 86400000; dest.hour = static_cast<unsigned char>(ms / 3600000); ms -= dest.hour * 3600000; dest.min = static_cast<unsigned char>(ms / 60000); ms -= dest.min * 60000; dest.sec = static_cast<unsigned char>(ms / 1000); dest.ms = ms - dest.sec * 1000; }
-
das ganze würde aber auch mir floor gehen ??? ^^ soviel code für ne simple rechnung :p
-
Geht auch ein klein wenig kuerzer und vor allem ohne das rumgecaste:
struct lasttime { unsigned char day; unsigned char hour; unsigned char min; unsigned char sec; unsigned char ms; }; void calculate_lasttime(unsigned long ms, lasttime& dest) { dest.ms = ms % 1000; //modulo liefert den Rest ms /= 1000; //integerdivision rundet immer ab, jetzt steht in ms die zahl der sekunden dest.sec = ms % 60; ms /=60; dest.min = ms % 60; ms /= 60; dest.hour = ms % 24; dest.day = ms / 24; }/edit: hab mir das nicht genau genug angeguckt, (D)Evil kann auch einfach seine casts streichen und die implizierte Konvertierung fuer sich arbeiten lassen. Ist ja auch nur integerdivision was er da macht.
-
DWORD Start = GetTickCount(); double start = double (Start); double day; double hour; double min1; double sec1; start = start / (60*60*24*1e3); day = floor(start); hour = start * 24; hour = floor(hour); min1 = start * 24; min1 = min1 - hour; min1 = min1 * 60; min1 = floor(min1); sec1 = start * 24; sec1 = sec1 - hour; sec1 = sec1 *60; sec1 = sec1 - min1; sec1 = sec1 * 60; sec1 = floor(sec1); cout << "\n\tSystem Uptime:\t" << day <<" Tage, " << hour << " Stunden, " << min1 << " Minuten, " << sec1 << " Sekunden " << endl;oder auch so :p
-
@pumuckl: Er gibt dann halt bloß, wenn man in meiner Variante die casts wegstreicht, eine Warnung aus ... "Treat Warning as Error"-Flag macht einem dann Probleme
