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();
}
面试重点区分
- QDate:只操作年月日
- QTime:只操作时分秒毫秒;Qt6禁止拿来做计时,仅做显示
- QDateTime = QDate + QTime,完整日期时间
- QElapsedTimer:专门统计代码执行耗时,高精度,Qt6标准用法
所有
addXXX()函数不会修改原对象,返回新的时间对象,需要接收返回值。
浙公网安备 33010602011771号