Zeitdifferenz: Lokal mit Zukunft.
-
Hi,
ich stehe vor einem Problem: Ich habe die aktuelle Urzeit (mit Tagen usw.) und eine Uhrzeit die heute noch ist (wenn sie nicht bereits vergangen ist) oder Morgen ist (höher geht nicht.)
Die Frage ist nun: Wie kann ich die Millisekunden ermitteln die zwischen der aktuellen Zeit ist und der übergebenen`, welche nur aus HH:MM besteht und sonst nix?
Hat jemand ein Beispiel dafür? Vielen dank im voraus

-
Du schneidest dir von der aktuellen Uhrzeit den Tages-Anteil ab (so daß auch nur noch HH:MM übrig bleibt), rechnest beide Werte um in Sekunden seit Mitternacht (t = 3600*h+60*m) und bildest ihre Differenz. Wenn die positiv ist, liegt die Zielzeit am selben Tag, wenn sie negativ ist, liegt sie am nächsten Tag und du kommst auf den echten Zeit-Unterschied, indem du 24 Stunden (=86400 Sekunden) draufaddierst.
-
cool das läuft ja eins A

Eine Frage hätte ich dann aber noch: Wie kann ich denn nun die Anzahl Millisekunden zwischen den beiden Uhrzeiten ermitteln, bezogen darauf das die Uhrzeit heute nocht stattfindet bzw. morgen.
Ich hatte mir dafür mal die struct tm angeguckt, aber bevor ich mich hier mit Schaltjahr und Monatsende rumplage, gibt es doch sicherlich auch wieder eine so einfache Rechnung, oder?

Nochmals Danke im voraus!
-
Wenn du die Zeiten nur auf Minuten genau hast, gar nicht

Ansonsten: Die Funktionen aus der <ctime> arbeiten afaik sekundengenau. Wenn dir das nicht genau genug ist, mußt du zu Bordmitteln deines BS greifen. (oder du multiplizierst alle Werte mit 1000 - da hast du dann zwar Millisekunden, aber wirklich exakter wist du dadurch nicht)
-
Also wenn da jetzt +-1 Minute drauf ist oder nicht ist egal. Darauf kommt es nicht an. Von mir aus kann man auch überall 0 Sekunden angeben, egal halt. So exakt muss es nicht sein.
Mit den C- Funktionen wollte ich mich nicht so sehr beschäftigen, da ich ja für sowas "Tag des Monats" eingeben muss, "Schaltjahr", "Nächster Monat", "Nächstes Jahr" usw. und da bekäm ich die Kriese.
Daher wäre mir eine ganz einfache "Formel" lieber. Egal ob die +-1 Minute Rechnet. Darauf kommt es mir echt nicht an

-
Aus dem
struct tmkannst du dir auch nur die Teile rausgreifen, die du für deine Anwendung benötigst - und für diese Zeit-Differenz brauchst du nur die Member tm_hour und tm_min.
-
Also das klappt irgendwie nicht.
tm zeit_1; zeit_1.tm_min = 12; zeit_1.tm_hour = 13; long zeit_1_wert = mktime (&zeit_1); tm zeit_2; zeit_2.tm_min = 15; zeit_2.tm_hour = 13; long zeit_2_wert = mktime (&zeit_2); long differenz = difftime (zeit_1_wert, zeit_2_wert);die mktime-Funktionen geben alle -1 wieder. Aber für difftime benötige ich doch integer-werte die mktime wiedergibt, oder?
-
Dann zerleg sie dir doch selber:
time_t t0=time(NULL); tm now = localtime(t0); int akt_zeit = 3600*now.tm_hour+60*now.tm_min+now.tm_sec; int tgt_zeit = 3600*tgt_hour+60*tgt_min; int delta = tgt_zeit-akt_zeit; if(delta<0) delta+=86400;