Qt - przetwarzanie daty i czasu za pomocą klasy QDateTime

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 5725 razy

Klasa QDateTime umożliwia przechowywanie daty i czasu jak również przetwarzanie jej. Aby jednak było to możliwe konieczne jest załączenie pliku QDateTime.

Metody statyczne

Klasa QDateTime dysponuje następującymi metodami statycznymi:

Konstruktory klasy QDateTime

Klasa QDateTime oprócz standardowego konstruktora bezparametrowego, konstruktora kopiującego i przenoszącego udostępnia konstruktory, które mogą przyjmować jako parametry obiekty klas QDate oraz QTime, które omawiałem już wcześniej na stronach Programowanie → Qt Creator konsola → Qt - przetwarzanie dat czyli klasa QDate i Programowanie → Qt Creator konsola → Qt - odmierzanie czasu czyli klasa QTime. Oto przykład zastosowania tych konstruktorów:

QDate date(2003, 1, 1); QTime time(10,20,30); QDateTime date1(date, time, QTimeZone::systemTimeZone()); qDebug() << date1; QDateTime date2(date, time, Qt::UTC); qDebug() << date2; qDebug() << date2.toLocalTime(); QDateTime date3(date, time); qDebug() << date3; QDateTime date4(date, time, QTimeZone(QString("my time zone").toLatin1(), 3600 * 3, "my local time!", "My private time zone!" ) ); qDebug() << date4; qDebug() << date4.toLocalTime(); QDateTime date5(date, time, QTimeZone(QString("Europe/Moscow").toLatin1())); qDebug() << date5;

Wynik działania powyższego kodu:

QDateTime(2003-01-01 10:20:30.000 środkowoeuropejski czas stand. Qt::TimeSpec(TimeZone) Europe/Warsaw)
QDateTime(2003-01-01 10:20:30.000 UTC Qt::TimeSpec(UTC))
QDateTime(2003-01-01 11:20:30.000 środkowoeuropejski czas stand. Qt::TimeSpec(LocalTime))
QDateTime(2003-01-01 10:20:30.000 środkowoeuropejski czas stand. Qt::TimeSpec(LocalTime))
QDateTime(2003-01-01 10:20:30.000 My private time zone! Qt::TimeSpec(TimeZone) my time zone)
QDateTime(2003-01-01 08:20:30.000 środkowoeuropejski czas stand. Qt::TimeSpec(LocalTime))
QDateTime(2003-01-01 10:20:30.000 Rosja (czas standardowy) Qt::TimeSpec(TimeZone) Europe/Moscow)

Metody zwracające datę i czas

Jeżeli zachodzi konieczność uzyskania dostępu do samej daty obiektu klasy QDateTime lub czasu, to metody date (zwracająca obiekt klasy QDate) i time (zwracająca obiekt klasy QTime są do tego celu stworzone.

Dodawanie milisekund, sekund, dni, miesięcy lub lat do bieżącej daty

Oto lista metod umożliwiających dodawanie milisekund, sekund, dni, miesięcy lub lat do bieżącej daty:

Obliczanie odstępu czasu pomiędzy dwiema datami

Istnieją trzy metody do obliczania odstępu czasu pomiędzy dwoma obiektami klasy QDateTime:

Oto przykład użycia powyższych metod:

QDate date(2003, 1, 1); QTime time(10,20,30); QDateTime date1(date, time); date.setDate(2012, 1, 2); time.setHMS(10, 03, 24); QDateTime date2(date, time); qDebug() << "Dni:" << date1.daysTo(date2); qDebug() << "Sekundy:" << date1.secsTo(date2); qDebug() << "Milisekundy" << date1.msecsTo(date2);

Wynik działania powyższego kodu:

Dni: 3288
Sekundy: 284082174
Milisekundy 284082174000

Ustawianie daty i czasu

Istnieje możliwość ustawienia daty i czasu obiektu klasy QDateTime po jego utworzeniu za pomocą metod:

Ustawienie specyfikacji czasu oraz jej pobieranie

Specyfikacja czasu może być ustawiona na Qt::UTC lub Qt::LocalTime. Metodą zwracającą ustawienia jest timeSpec, natomiast ustawiającą jest setTimeSpec.

Pobieranie i ustawianie strefy czasowej

Metoda timeZone zwraca obiekt klasy QTimeZone, który zawiera opis ustawionej strefy czasowej. Możliwe jest też zmienienie ustawień strefy czasowej za pomocą metody setTimeZone, która z kolei przyjmuje jako argument obiekt klasy QTimeZone.

QDate date(2003, 1, 1); QTime time(10,20,30); QDateTime date1(date, time); date.setDate(2012, 1, 2); qDebug() << date1.timeZone() << date1; QTimeZone tz(QString("Europe/Paris").toLatin1()); date1.setTimeZone(tz); qDebug() << date1.timeZone() << date1;

Wynik działania powyższego kodu:

QTimeZone("Europe/Warsaw") QDateTime(2003-01-01 10:20:30.000 środkowoeuropejski czas stand. Qt::TimeSpec(LocalTime))
QTimeZone("Europe/Paris") QDateTime(2003-01-01 10:20:30.000 Romański czas standardowy Qt::TimeSpec(TimeZone) Europe/Paris)

Metody konwertujące czas do innej strefy czasowej

Istnieje wiele różnych wariantów metod umożliwiających przeliczenie przechowywanego w obiekcie klasy QDateTime czasu i daty na czas i datę innej strefy czasowej. Oto lista takich metod:

Zamiana daty na liczbę sekund lub milisekund

Istnieją dwie metody, które zwracają liczbę sekund lub milisekund jakie upłynęły od 1970-01-01T00:00:00.000. Metodami tymi są:

Zamiana dwóch obiektów klas QDateTime miejscami

Metoda swapswap zamienia wartości dat i czasów przechowywanych przez dwa obiekty klasy QDateTime.

Porównywanie dwóch obiektów klasy QDateTime

Klasa QDateTime obsługuje wszystkie operatory porównania obiektów QDateTime.

Zamiana daty i czasu na tekst

Oto jak za pomocą metody toString można uzyskać datę w postaci tekstu:

QDate date(2003, 1, 1); QTime time(10,20,30); QDateTime date1(date, time); qDebug() << date1.toString("yyyy-MM-dd hh-mm-ss"); qDebug() << date1.toString("yyyy-MMM-dd (ddd) hh-mm-ss"); qDebug() << date1.toString("yyyy-MMMM-dd (dddd) hh-mm-ss");

Wynik działania powyższego kodu:

"2003-01-01 10-20-30"
"2003-sty-01 (śr) 10-20-30"
"2003-stycze˝-01 (środa) 10-20-30"
Strony powiązane
strony powiązane
  1. doc.qt.io/qt-5/qdatetime.html - opis klasy QDateTime na stronie dokumentacji biblioteki Qt
Propozycje książek