• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
sn-genuine
博客园    首页    新随笔    联系   管理    订阅  订阅

Qt 日期和时间(QDate / QTime / QDateTime / QElapsedTimer)

Qt 日期和时间(QDate / QTime / QDateTime / QElapsedTimer)

Qt6注意:QTime 的start()/elapsed()计时接口已经移除,代码耗时统计必须使用 QElapsedTimer

头文件

#include <QDate>
#include <QTime>
#include <QDateTime>
#include <QElapsedTimer>
#include <QDebug>

6.1 QDate 日期类(只处理年/月/日)

常用静态函数

// 获取系统本地当前日期
QDate QDate::currentDate();

常用成员函数

// 构造
QDate d1(2026,8,29);

// 获取年月日
int year() const;
int month() const;
int day() const;

// 日期增减,返回新对象,不会修改原对象
QDate addDays(qint64 ndays) const;
QDate addMonths(int nmonths) const;
QDate addYears(int nyears) const;

// 格式化输出字符串
QString toString(const QString &format) const;

格式化符号 QDate::toString()

符号 含义 示例
d 日,不带前导0 1‑31
dd 日,带前导0 01‑31
M 月,不带前导0 1‑12
MM 月,带前导0 01‑12
yy 两位年份 26
yyyy 四位完整年份 2026

QDate 使用示例

// 获取当前日期
QDate d = QDate::currentDate();
// 方式1:直接读取字段
qDebug()<<"year:"<<d.year()<<" moth:"<<d.month()<<" day:"<<d.day();
// 方式2:格式化为字符串
QString str = d.toString("yyyy‑MM‑dd");
qDebug()<<"date str:"<<str;

6.2 QTime 时间类(只处理时/分/秒/毫秒)

⚠️ Qt6:不能用于计时,仅用于时间显示;计时请用 QElapsedTimer

常用静态函数

// 获取当前系统时间
QTime QTime::currentTime();

常用成员函数

//构造:时,分,秒,毫秒
QTime(int h, int m, int s = 0, int ms = 0);

int hour() const;        //小时 0‑23
int minute() const;      //分钟 0‑59
int second() const;      //秒 0‑59
int msec() const;        //毫秒 0‑999

//时间增减
QTime addSecs(int s) const;
QTime addMSecs(int ms) const;

//格式化字符串
QString toString(const QString &format) const;

QTime格式化符号

符号 含义
hh 小时 00‑23
mm 分钟 00‑59
ss 秒 00‑59
zzz 毫秒 000‑999

QTime 使用示例

QTime curtime = QTime::currentTime();
//读取时分秒毫秒
qDebug()<<"hour:"<<curtime.hour()<<" minute:"<<curtime.minute()
         <<" second:"<<curtime.second()<<" millisecond:"<<curtime.msec();
//格式化字符串
QString strtm = curtime.toString("hh:mm:ss.zzz");
qDebug()<<"格式化的时间:"<<strtm;

6.3 QDateTime 日期时间类(QDate + QTime 的组合)

常用静态函数

// 获取本地当前日期+时间
QDateTime QDateTime::currentDateTime();

常用成员函数

// 拆分拿到日期、时间
QDate date() const;
QTime time() const;

// 时间增减
QDateTime addYears(int nyears) const;
QDateTime addMonths(int nmonths) const;
QDateTime addDays(qint64 ndays) const;
QDateTime addSecs(qint64 s) const;
QDateTime addMSecs(qint64 msecs) const;

//格式化,格式符号复用 QDate QTime
QString toString(const QString &format) const;

QDateTime 使用示例

QDateTime dt = QDateTime::currentDateTime();
//格式化输出
QString strdt = dt.toString("yyyy‑MM‑dd hh:mm:ss");
qDebug()<<"当前时间和日期:"<<strdt;

//拆分取出日期
QDate d = dt.date();
qDebug()<<"year:"<<d.year()<<" moth:"<<d.month()<<" day:"<<d.day();

//拆分取出时间
QTime curtime = dt.time();
qDebug()<<"hour:"<<curtime.hour()<<" minute:"<<curtime.minute()
        <<" second:"<<curtime.second()<<" millisecond:"<<curtime.msec();

6.4 QElapsedTimer 代码耗时统计(Qt6推荐计时类)

❗Qt6 废弃 QTime::start() / elapsed(),统计运行时间必须用这个类

常用API

void start();         //开始计时
qint64 elapsed();     //获取从start到现在消耗的毫秒
qint64 restart();     //返回耗时,并重置计时器

示例代码

//统计函数运行耗时
QElapsedTimer tt;
tt.start();
randNumbers(100);
qint64 ms = tt.elapsed();
qDebug()<<"函数执行所用的时间:"<<ms<<"毫秒";

randNumbers测试函数

void MainWindow::randNumbers(int count){
    srand(time(NULL));
    for(int i=0;i<count;i++){
        int num = rand()%10000;
        qDebug()<<num;
    }
}

完整MainWindow构造函数参考

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 获取当前日期
    QDate d = QDate::currentDate();
    qDebug()<<"year:"<<d.year()<<" moth:"<<d.month()<<" day:"<<d.day();
    QString str = d.toString("yyyy‑MM‑dd");
    qDebug()<<"date str:"<<str;

    // 获取当前时间
    QTime curtime = QTime::currentTime();
    qDebug()<<"hour:"<<curtime.hour()<<" minute:"<<curtime.minute()
             <<" second:"<<curtime.second()<<" millisecond:"<<curtime.msec();
    QString strtm = curtime.toString("hh:mm:ss.zzz");
    qDebug()<<"格式化的时间:"<<strtm;

    // 统计函数运行的时间
    QElapsedTimer tt;
    tt.start();
    randNumbers(100);
    qint64 ms = tt.elapsed();
    qDebug()<<"函数执行所用的时间:"<<ms<<"毫秒";

    // 获取当前日期时间
    QDateTime dt = QDateTime::currentDateTime();
    QString strdt = dt.toString("yyyy‑MM‑dd hh:mm:ss");
    qDebug()<<"当前时间和日期:"<<strdt;

    d = dt.date();
    qDebug()<<"year:"<<d.year()<<" moth:"<<d.month()<<" day:"<<d.day();
    curtime = dt.time();
    qDebug()<<"hour:"<<curtime.hour()<<" minute:"<<curtime.minute()
            <<" second:"<<curtime.second()<<" millisecond:"<<curtime.msec();
}

面试重点区分

  1. QDate:只操作年月日
  2. QTime:只操作时分秒毫秒;Qt6禁止拿来做计时,仅做显示
  3. QDateTime = QDate + QTime,完整日期时间
  4. QElapsedTimer:专门统计代码执行耗时,高精度,Qt6标准用法

所有addXXX()函数不会修改原对象,返回新的时间对象,需要接收返回值。

posted on 2026-08-29 00:08  SobNov  阅读(12)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3