QTime: die eleganteste Methode, die Zeitdauer zu berechnen?

Alles rund um die Programmierung mit Qt
Antworten
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

QTime: die eleganteste Methode, die Zeitdauer zu berechnen?

Beitrag von harry_m »

Ich stehe auf dem Schlauch.

Die Klasse "QTime" hat die Methode "::secsTo()" um die Zahl der Sekunden vom aktuelle Zeitpunkt bis zu einem anderen zu berechnen. Ich muss jedoch die Zeitdauer zwischen zwei Zeitpunkten berechnen, die in einem "QTime" gespeichert sind (z.B. Anfangszeit 12:00, Endezeit: 14:30, dauer, 2,5Stunden). Wie mache ich es denn am besten?
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QTime: die eleganteste Methode, die Zeitdauer zu berechn

Beitrag von Hulk2442 »

Du musst die zwei Zeiten definieren und dann die Berechnung starten.
Berechnung der Sekunden seit 00:00 bis jetzt

Code: Alles auswählen

	QTime zeroHour;
	zeroHour.setHMS( 0, 0, 0, 0 );
	int iSeconds = zeroHour.secsTo( QTime::currentTime() );
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QTime: die eleganteste Methode, die Zeitdauer zu berechn

Beitrag von harry_m »

Hallo Grünling, ;)

Danke für die Antwort.

Das habe ich schon gesehen. Ich will aber nicht mit dem "Jetzt" Wert rechnen, sondern die verstrichene Zeit zwischen zwei Zeitstempeln möglichst mit "bordeigenen" Qt-Mitteln machen.

Bis jetzt ist mir nichts besseres eingefallen, als die Zeitstempel im "QDateTime"-Format zu erfassen, beide Zeitwerte mit Hilfe von "QDateTime::toTime_t()" in Anzahl von Sekunden seit 1970-01-01T00:00:00 umzurechnen und dann eben die Zeitdifferenz daraus zu errechnen.

Es ist zwar ein Weg, den finde ich aber alles andere, als elegant an (denn hier besteht immer noch die Unsicherheit, dass die Zeitangaben nicht vom gleichen Tag sind: daher müsste man noch eine Überprüfung einbauen...), und es wundert mich doch sehr, dass ich dafür keine geignete Funktion finde.

Gruß
Harry

P.S.: Stop!!!

Es hat gedauert, aber ich glaube es jetzt verstanden zu haben. Danke...
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QTime: die eleganteste Methode, die Zeitdauer zu berechn

Beitrag von harry_m »

Grünling == Hulk.

Daher auch das ;)

Habe mir die Freiheit genommen. Bitte nicht übel nehmen.

P.S.: das ist gerade doch ein Beitrag verschwunden, oder?!
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QTime: die eleganteste Methode, die Zeitdauer zu berechn

Beitrag von Hulk2442 »

Hi
Ja Sorry hast mich gerade zu einem schlechten Zeitpunkt erwischt.
Deshalb habe ich nach den 5 Minuten Besinnung den Beitrag wieder gelöst in der Hoffnung das du Ihn noch nicht gesehen hast.
Da du Ihn gesehen hast - bitte nicht zu ernst nehmen war nicht so gemeint.
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QTime: die eleganteste Methode, die Zeitdauer zu berechn

Beitrag von Hulk2442 »

btw.
Ich glaube du bist schneller/performanter mit der Berechnung wenn du dir die Tag zwischen den zwei Zeitpunkten ausrechnest und diese mit "84400" (Sekunden am Tag) Multiplizierst.
Pass jedoch bezüglich des Overflows auf. Bei diesen Zahlengsößen hast du diesen schnelle erreicht. Und da Qt bei einem Overflow wieder von Anfang an Rechnet bemerkt man diesen oft viel zu spät.
ich denke die beste Lösung wäre hierfür eine quint64.
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QTime: die eleganteste Methode, die Zeitdauer zu berechn

Beitrag von harry_m »

Ich will jetzt meine Lösung zeigen:

Code: Alles auswählen

int FormJob::tSec(QString dtStr)
{
    QTime time = QDateTime::fromString(dtStr, "yyyy-MM-ddThh:mm:ss").time();
    QTime tZero;
    tZero.setHMS(0,0,0,0);
    return tZero.secsTo(time);
}
Sprich: meine Zeiten werden aus der SQLite Datenbank als "DateTime" geholt. Ich mache ein "QTime" daraus: damit sind die Datumsangaben weg. (Denn die Stundenangaben sind alle an einem Tag).

Und dann kommt der Abschnitt, der vom "Hulk2442" (richtigerweise) vorgeschlagen wurde (bei mir hat es gedauert, bis der Groschen gefallen war...) So habe ich die Zeit als Anzahl der Sekunden ab Mitternacht: was für meine Zwecke genau richtig ist.

Danke für die Hilfe.

Gruß
Harry

P.S.: und ja, ich muss es noch auf qint umstellen!
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Antworten