Dies ist eine alte Version des Dokuments!
Zur Darstellung und Verarbeitung von Uhrzeiten wird QTime
verwendet. Die aktuelle Uhrzeit kann mit der statischen Methode QTime::currentTime()
abgefragt werden. Über die ebenfalls statische Methode QTime::isValid()
kann die Gültigkeit einer Uhrzeit geprüft werden:
QTime::isValid(12, 1, 2, 3); // true QTime::isValid(25, 4, 5, 6); // false
QTime
-Objekte können sehr einfach in Text konvertiert umgewandelt werden - und umgekehrt. Dazu dient die Methode QTime::toString()
bzw. die statische Methode QTime::fromString()
. Letztere bietet uns verschiedene Optionen, deshalb sehen wir sie uns genauer an:
QTime QTime::fromString (const QString& string, const QString& format)
string: String, der die Uhrzeit enthält
format: Format der Uhrzeit im String
Für die Formatangabe werden folgende Buchstaben verwendet:
Format | Bedeutung | zutreffende Beispiele |
---|---|---|
h | Stundenzahl ohne führende 0 | 3; 14 |
hh | Stundenzahl mit führender 0 | 03; 14 |
m | Minutenzahl ohne führende 0 | 5; 25 |
mm | Minutenzahl mit führender 0 | 05; 25 |
s | Sekundenzahl ohne führende 0 | 7; 36 |
ss | Sekundenzahl mit führender 0 | 07; 36 |
z | Millisekunden ohne führende 0 | 8; 123 |
zzz | Millisekunden mit führender 0 | 008; 123 |
AP | 12 Stunden-Format; AP muss entweder „AM“ oder „PM“ sein. | AM; PM |
ap | 12 Stunden-Format; AP muss entweder „am“ oder „pm“ sein. | am; pm |
Dazu noch ein Code-Beispiel:
QTime t = QTime::currentTime(); QString text = "13:37:42"; std::cout << "Es ist " << t.toString().toStdString() << " Uhr." << std::endl; t = QTime::fromString(text, "hh:mm:ss"); std::cout << t.toString().toStdString() << std::endl;
Ausgabe:
Es ist 15:02:22 Uhr. 13:37:42
QTime
kann auch zur Zeitmessung eingesetzt werden. Dafür werden die Methoden QTime::start()
, QTime::restart()
und QTime::elapsed()
verwendet. QTime::start()
startet den Timer mit der aktuellen Uhrzeit. QTime::restart()
macht genau das selbe, aber gibt zusätzlich die seit dem letzten Start verstrichene Zeit in Millisekunden zurück. QTime::elapsed()
gibt nur die Zeit zurück und lässt den Timer unverändert weiterlaufen.
Wir können diese Methoden für einen einfachen Benchmark verwenden (Selectionsort vs. Insertionsort; die Algorithmen spielen in diesem Zusammenhang aber keine Rolle):
#include <QTime> #include <cstring> #include <iostream> // Anzahl der Elemente im Array const int num = 10000; // Prototypen für Algorithmen void selectionSort (int *vec, int n); void insertionSort (int *vec, int n); int main() { int array[num], // Array mit Zufallszahlen; wird nicht verändert buffer, // Puffer-Element für Insertionsort copy[num]; // Kopie des Arrays mit Zufallszahlen QTime t = QTime::currentTime(); // aktuelle Zeit abfragen qsrand(t.msec()); // Zufallsgenerator initialisieren // Array mit Zufallszahlen füllen for (int i = 0; i < num; i++) array[i] = qrand(); memcpy(copy, array, num * sizeof(int)); // Zufallszahlen kopieren t.start(); // Timer starten selectionSort(copy, num); // Array mit Selectionsort sortieren std::cout << "Selectionsort: " << t.elapsed() << std::endl; // vergangene Zeit ausgeben memcpy(copy, array, num * sizeof(int)); // Zufallszahlen kopieren t.start(); // Timer starten insertionSort(copy - 1, num); // Array mit Insertionsort sortieren std::cout << "Insertionsort: " << t.elapsed() << std::endl; // vergangene Zeit ausgeben return 0; } void selectionSort (int *vec, int n) { int i, j, help, min; for (i = 0; i < n - 1; i++) { min = i; for (j = i + 1; j < n; j++) if (vec[j] < vec[min]) min = j; if (min != i) { help = vec[i]; vec[i] = vec[min]; vec[min] = help; } } } void insertionSort (int *vec, int n) { int i, j; for (i = 2; i <= n; i++) { j = i; vec[0] = vec[i]; while (vec[0] < vec[j - 1]) { vec[j] = vec[j - 1]; j--; } vec[j] = vec[0]; } }