Qt - przetwarzanie daty i czasu za pomocą klasy QDateTime

Stronę tą wyświetlono już: 24 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:

  • currentDateTime - zwraca obiekt klasy QDateTime zawierający bieżącą datę i czas;
  • currentDateTimeUtc - zwraca obiekt klasy QDateTime zawierający bieżącą datę i czas UTC;
  • currentMSecsSinceEpoch - zwraca liczbę milisekund, jakie upłynęły od 1970-01-01 00:00:00 w czasie UTC;
  • currentSecsSinceEpoch - zwraca liczbę milisekund, jakie upłynęły od 1970-01-01 00:00:00 do teraz;
  • fromMSecsSinceEpoch - tworzy obiekt klasy QDateTime na podstawie liczby milisekund, jakie upłynęły od 1970-01-01 00:00:00 w wybranej strefie czasowej;
  • fromSecsSinceEpoch - tworzy obiekt klasy QDateTime na podstawie liczby sekund, jakie upłynęły od 1970-01-01 00:00:00 w wybranej strefie czasowej;
  • fromString - tworzy obiekt klasy QDateTime na podstawie tekstu i podanego formatowania

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:

Listing 1
  1. QDate date(2003, 1, 1);
  2. QTime time(10,20,30);
  3. QDateTime date1(date, time, QTimeZone::systemTimeZone());
  4. qDebug() << date1;
  5. QDateTime date2(date, time, Qt::UTC);
  6. qDebug() << date2;
  7. qDebug() << date2.toLocalTime();
  8. QDateTime date3(date, time);
  9. qDebug() << date3;
  10. QDateTime date4(date, time, QTimeZone(QString("my time zone").toLatin1(),
  11. 3600 * 3,
  12. "my local time!",
  13. "My private time zone!"
  14. )
  15. );
  16. qDebug() << date4;
  17. qDebug() << date4.toLocalTime();
  18. QDateTime date5(date, time, QTimeZone(QString("Europe/Moscow").toLatin1()));
  19. 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:

  • addMSec - dodawanie milisekund;
  • addSec - dodawanie sekund;
  • addDays - dodawanie dni;
  • addMonths - dodawanie miesięcy;
  • addYears - dodawanie lat

Obliczanie odstępu czasu pomiędzy dwiema datami

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

  • daysTo - zwraca liczbę dni dzielących dwie daty;
  • secsTo - zwraca liczbę sekund dzielących dwie daty;
  • msecsTo - zwraca liczbę milisekund dzielących dwie daty;

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

Listing 2
  1. QDate date(2003, 1, 1);
  2. QTime time(10,20,30);
  3. QDateTime date1(date, time);
  4. date.setDate(2012, 1, 2);
  5. time.setHMS(10, 03, 24);
  6. QDateTime date2(date, time);
  7. qDebug() << "Dni:" << date1.daysTo(date2);
  8. qDebug() << "Sekundy:" << date1.secsTo(date2);
  9. 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:

  • setDate - ustawia datę;
  • setTime - ustawia czas

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.

Listing 3
  1. QDate date(2003, 1, 1);
  2. QTime time(10,20,30);
  3. QDateTime date1(date, time);
  4. date.setDate(2012, 1, 2);
  5. qDebug() << date1.timeZone() << date1;
  6. QTimeZone tz(QString("Europe/Paris").toLatin1());
  7. date1.setTimeZone(tz);
  8. 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:

  • toLocalTime - przelicza do lokalnego czasu, z jakiego korzysta system;
  • toOffsetFromUtc - przelicza do czasu UTC z uwzględnieniem podanego w sekundach przesunięcia;
  • toTimeSpec - przelicza według podanej specyfikacji;
  • toTimeZone - przelicza do opisanej strefy czasowej przez podany jako argument tej metody obiekt klasy QTimeZone;
  • toUTC - przelicza do czasu UTC

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ą:

  • toMSecsSinceEpoch;
  • toSecsSinceEpoch

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:

Listing 4
  1. QDate date(2003, 1, 1);
  2. QTime time(10,20,30);
  3. QDateTime date1(date, time);
  4. qDebug() << date1.toString("yyyy-MM-dd hh-mm-ss");
  5. qDebug() << date1.toString("yyyy-MMM-dd (ddd) hh-mm-ss");
  6. 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

Komentarze