QDateTime difference

Alles rund um die Programmierung mit Qt
Antworten
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

QDateTime difference

Beitrag 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
ireas
Beiträge: 13
Registriert: 24. Juni 2010 13:50

Beitrag 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
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

Beitrag von Irods »

Danke für die schnelle Antwort ireas.
Probiere ich sofort aus :D
ireas
Beiträge: 13
Registriert: 24. Juni 2010 13:50

Beitrag 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
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag 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 :)
ireas
Beiträge: 13
Registriert: 24. Juni 2010 13:50

Beitrag 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.
Irods
Beiträge: 53
Registriert: 24. Mai 2009 20:57
Kontaktdaten:

Beitrag 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
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
Antworten