首頁 > 軟體

QT獲取顯示當前時間和日期的方法(用QTime,QDate和QDateTime)

2022-08-11 14:01:07

獲取當前時間和日期

QT中獲取時間和日期的主要是 QTime 、QDate 和 QDateTime 這三個類。

QTime 類

通過 QTime 類中提供的時間相關的方法,可以獲取到當前系統時間(時、分、秒、毫秒),需要注意的是,計時的準確性由底層作業系統決定,並不是所有的作業系統都能精確到毫秒級別。

通過呼叫 QTime 類中的 currentTime() 方法可以獲取到當前系統時間:

QTime time = QTime::currentTime();
qDebug() << time;

輸出結果:
QTime("12:01:13.427")

如果我們需要獲取字串形式的時間,可以使用 toString() 這個方法:

QTime time = QTime::currentTime();
qDebug() << time.toString("hh:mm:ss");

輸出結果:
"12:01:13"

字串形式的時間輸出格式由 toString() 方法中的 format 參數列決定,可用的參數列如下:

如果我們在顯示時間的同時還需要顯示上午或下午,可以在格式列表新增新增 “AP、A、ap、a” 等選項:

QTime time = QTime::currentTime();
qDebug() << time.toString("hh:mm:ss a");

輸出結果:
"02:29:31 下午"

當你電腦的系統語言使用中文時,不管格式列表中填 AP、A、ap、a 這四個選項裡的哪一個,都只會顯示上午或下午;只有當電腦系統語言使用英文時才會區分大小寫,例如選擇 AP/A,顯示 AM/PM,選擇 ap/a,顯示 am/pm 。

hh欄位的顯示格式受 AP/A 或 ap/a 影響,如果格式列表中使用了 AP/A 或 ap/a 選項區分上下午,則 hh欄位採用12小時制格式顯示;否則使用24小時制格式顯示:

QTime time = QTime::currentTime();
qDebug() << time.toString("hh:mm:ss a");
qDebug() << time.toString("hh:mm:ss");

輸出結果:
"02:50:38 下午"
"14:50:38"

HH欄位的顯示格式則不受 AP/A 或 ap/a 影響,不管格式列表中是否使用 AP/A 或 ap/a 選項區分上下午,HH欄位均採用24小時制格式顯示:

QTime time = QTime::currentTime();
qDebug() << time.toString("HH:mm:ss a");
qDebug() << time.toString("HH:mm:ss");

輸出結果:
"14:52:03 下午"
"14:52:03"

在格式列表中新增 t 選項可以用來獲取時區資訊:

QTime time = QTime::currentTime();
qDebug() << time.toString("hh:mm:ss t");

輸出結果:
"14:59:02 中國標準時間"
    
修改時區後輸出結果:
"14:00:45 新西伯利亞標準時間"

QDate類

通過呼叫 QDate 類中的 currentDate() 方法可以獲取到當前系統日期:

QDate date = QDate::currentDate();
qDebug() << date;
qDebug() << date.toString("yyyy-MM-dd");

輸出結果:
QDate("2022-04-29")
"2022-04-29"

QDate類中對日期的操作與QTime類中對時間的操作基本一樣,需要字串格式的日期時,使用 toString() 方法即可,QDate類中對日期操作常用格式如下:

需要顯示星期時,使用 ddd 或 dddd 選項:

QDate date = QDate::currentDate();
qDebug() << date;
qDebug() << date.toString("yyyy-MM-dd ddd");
qDebug() << date.toString("yyyy-MM-dd dddd");

輸出結果:
"2022-04-29 週五"
"2022-04-29 星期五"

QDateTime類

QDateTime類是 QDate 和 QTime 的組合,提供一系列時間和日期相關的函數。

通過呼叫 QDateTime 類中的 currentDateTime() 方法可以獲取到當前系統時間和日期:

QDateTime dateTime;
dateTime = QDateTime::currentDateTime();
qDebug()<<dateTime;
qDebug() << dateTime.toString("yyyy-MM-dd hh:mm:ss ddd");

輸出結果:
QDateTime(2022-04-29 15:22:23.615 中國標準時間 Qt::TimeSpec(LocalTime))
"2022-04-29 15:22:23 週五"

使用 toString() 方法將時間和日期轉換成字串形式時,格式與 QTime、QDate 中的格式一樣。

定時更新顯示時間和日期

建立一個定時器,每秒獲取一次系統時間和日期,轉換成字串形式後再通過Label空間顯示即可完整程式碼如下:

main.cpp

#include "dateTime.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    DateTime w;
    w.show();
    return a.exec();
}

dateTime.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDateTime>
#include <QDebug>
#include <QTimer>
#include <QLabel>
#include <QVBoxLayout>
#include <QApplication>

class DateTime : public QWidget
{
    Q_OBJECT

public:
    DateTime(QWidget *parent = nullptr);
    ~DateTime();

    void timeUpdate(void);

private:
    QDateTime dateTime;
    QTimer *timer;
    QLabel *label;
};
#endif

dateTime.cpp

#include "dateTime.h"

DateTime::DateTime(QWidget *parent)
    : QWidget(parent)
{
    //設定視窗標題和視窗大小
    this->setWindowTitle("時間更新顯範例程");
    this->resize(500, 100);

    //建立label物件顯示時間和日期
    label = new QLabel(this);

    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(label);
    this->setLayout(layout);

    //初始化時間和日期顯示
    dateTime = QDateTime::currentDateTime();
    this->label->setText(dateTime.toString("yyyy-MM-dd hh:mm:ss ddd"));

    //建立定時器定時更新時間和日期
    timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &DateTime::timeUpdate);
    timer->start(1000);
}

DateTime::~DateTime()
{
    delete timer;
}

void DateTime::timeUpdate(void)
{
    dateTime = QDateTime::currentDateTime();
    this->label->setText(dateTime.toString("yyyy-MM-dd hh:mm:ss ddd"));
}


補充:QT中分別獲取當前時間的年、月、日

百度查了半天,沒找到,就自己寫了一個測試,其實也很簡單,先用QDate去獲取當前的時間,時間格式設定為"yyyy-MM-dd",也就是"年-月-日"的格式,然後再利用字串切割(strtok函數)去切割成獨立的年、月、日就OK啦,程式碼如下(適合懶人一族,直接複製貼上,哈哈^ _ ^)

QDate currentdate = QDate::currentDate();
QString str1 = currentdate.toString("yyyy-MM-dd");
qDebug() << "str1 = " << str1;
QByteArray ba = str1.toLatin1();//將QString 轉換為 char *型別
char *dateStr = ba.data();//將QString 轉換為 char *型別
char *year = strtok(dateStr,"-");
char *month = strtok(NULL,"-");
char *date = strtok(NULL,"-");
qDebug() << "year is:" << year;
qDebug() << "month is:" << month;
qDebug() << "date is:" << date;

執行結果如下:

總結

到此這篇關於QT獲取顯示當前時間和日期的文章就介紹到這了,更多相關QT獲取顯示當前時間日期內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com