Seite 1 von 1

QDateTime difference

Verfasst: 24. Juni 2010 16:24
von Irods
Hi Leute,
ich bin gerade dabei zu versuchen zwei QDateTime Variablen zu subtrahieren.
Bisher versuch ich dies folgender Maßen:

Code: Alles auswählen

time.setTime_t( time.toTime_t()-end.toTime_t() );
Leider funktioniert dies nicht.
Wenn jemand eine Idee hat was ich falsch mache oder wie dies anders gehen könnte wäre das echt cool.

Gruss und schon mal Dank, Irods.

PS:Ja, end ist kleiner als time. :D

Verfasst: 24. Juni 2010 16:35
von ireas
Hi!

Ich habe es noch nicht ausprobiert, aber eigentlich müsste secsTo die Lösung sein (dann ein neues QDateTime erstellen und addSecs verwenden).

Grüße,
ireas

Verfasst: 24. Juni 2010 16:39
von Irods
Danke für die schnelle Antwort ireas.
Probiere ich sofort aus :D

Verfasst: 24. Juni 2010 16:43
von ireas
Wenn mein Qt Creator nicht mehrere Minuten brauchen würde, bis er startet, hätte ich es schon selbst ausprobiert … :roll:

Übrigens war das gerade dein 42. Beitrag – gratuliere! :-D

Verfasst: 24. Juni 2010 17:05
von kater
ireas hat geschrieben:Wenn mein Qt Creator nicht mehrere Minuten brauchen würde, bis er startet, hätte ich es schon selbst ausprobiert … :roll:
Hatt ich auch schon. Mal die neuste Version installieren hat geholfen :)

Verfasst: 24. Juni 2010 17:24
von ireas
kater hat geschrieben:
ireas hat geschrieben:Wenn mein Qt Creator nicht mehrere Minuten brauchen würde, bis er startet, hätte ich es schon selbst ausprobiert … :roll:
Hatt ich auch schon. Mal die neuste Version installieren hat geholfen :)
Hm, eigentlich müsste er in der neusten Version vorliegen … Naja, momentan ist alles saulahm, ich muss mal wieder mein OS neuinstallieren. :-D Vielleicht gibt sich das Qt-Creator-Problem dann.

@topic:

Folgender exemplarischer Code generiert mir problemlos den Zeitunterschied in Sekunden, nur der addSecs-Weg zurück zu QDateTime funktioniert nicht richtig. Scheinbar muss das Datum schon valide sein, bevor addSecs aufgerufen wird – was ja eigentlich auch logisch ist. ;)

Code: Alles auswählen

#include <QtCore>

int main()
{
    QDateTime now       = QDateTime::currentDateTime();
    QDateTime yesterday = QDateTime::currentDateTime().addDays(-1);

    int differenceInSecs = now.secsTo(yesterday);

    return 0;
}
Reicht dir das, oder brauchst du auch noch ein QTime- oder QDateTime-Objekt am Ende? QTime könntest du dir mit mod- und div-Operationen basteln.

Verfasst: 25. Juni 2010 09:49
von Irods
danke Leute für die ganzen Antowrten ich hab jetzt das ganze folgender maßen gelöst

Code: Alles auswählen

	QDateTime time=QDateTime::currentDateTime();
	QDateTime end;
	end.setTime(endTime);
	end.setDate(endDate);
	int all=time.secsTo(end);
	int days=all/60/60/24;
	int h=(all-days*24*60*60)/60/60;
	int min=(all-days*24*60*60-h*60*60)/60;
	int sek=all%60;
Ist ein bisschen unschön funktioniert dafür aber 100% nach meinen Vorstellungen.

Gruss Irods

Verfasst: 25. Juni 2010 12:48
von RHBaum
Anmerkung:

Hat zwar wenig Auswirkungen auf den geposteten Code, aber Du solltest es Dir angewoehnen die benutzten Klassen genauer zu untersuchen und effektivere Methoden verwenden wenn sie findest.
Konkret: QDateTime hat nen passenden CTor. Nutze den

Code: Alles auswählen

QDateTime end;
end.setTime(endTime);
end.setDate(endDate); 
wird zu:

Code: Alles auswählen

QDateTime end(endDate,endTime);
Sieht doch scho besser aus oder ?

Das geroedel mit den aufsplitten kannst dir unter anderem auch sparen.
- Du bekommst die Tage zwischen den terminen raus

Code: Alles auswählen

int Days = time.daysto(end);
- Aus einem beliebigen datum kann man die ZeitKomponente einfach abspalten

Willst doch selber bauen, wuerd ich komplett auf time_t oder so bauen und die QDateTime dinger etc versuchen rauszulassen ...

Ciao ...