QDateTime
QDateTime 是 Qt 框架中用于处理日期和时间的核心类,它结合了 QDate 和 QTime 的功能。
头文件
#include <QDateTime>
❶ 创建 QDateTime 对象
获取当前日期时间
// 获取当前日期时间(本地时间) QDateTime currentDateTime = QDateTime::currentDateTime(); // 获取当前日期时间(UTC时间) QDateTime currentDateTimeUtc = QDateTime::currentDateTimeUtc(); //注释:打断点是查看不了QDateTime的年月日时间的,要转成QString才能查看
手动指定日期和时间来创建
//使用具体的日期和时间来创建 QDate date(2023, 10, 15);//年,月,日 QTime time(14, 30, 0);//时,分,秒 QDateTime customDateTime(date, time);
从时间戳创建
//从自1970-01-01 00:00:00 UTC以来的毫秒数创建 qint64 msecs = 1697365800000; QDateTime dateTimeFromEpoch = QDateTime::fromMSecsSinceEpoch(msecs);
❷ 获取日期时间信息
获取 QDateTime 中的日期和时间组成部分
//获取 QDateTime 中的日期和时间组成部分 QDateTime dt = QDateTime::currentDateTime(); //获取日期部分 QDate datePart = dt.date(); int year = datePart.year(); //年 int month = datePart.month(); //月 int day = datePart.day(); //日 //获取时间部分 QTime timePark = dt.time(); int hour = timePark.hour(); //时 int minute = timePark.minute();//分 int second = timePark.second();//秒 int msec = timePark.msec(); //毫秒
❸ 日期时间格式化与字符串转换
QDateTime 可以方便地与字符串相互转换:
//QDateTime 可以方便地与字符串相互转换: QDateTime dt1 = QDateTime::currentDateTime(); QString str1 = dt1.toString(); //默认格式 QString str2 = dt1.toString(Qt::ISODate); //ISO格式 QString str3 = dt1.toString("yyyy-MM-dd HH:mm:ss"); //自定义格式 QString str4 = dt1.toString("yyyy-MM-dd HH:mm:ss.zzz"); //自定义格式(带毫秒) QString str5 = dt1.toString(codec->toUnicode("yyyy年MM月dd日 hh时mm分ss秒")); //这里有个中文转换
下面是一些常用的格式符:
| 类别 | 格式符 | 含义与示例 |
|---|---|---|
| 年 | yyyy | 4位年份(2023) |
| yy | 2位年份(23) | |
| 月 | MM | 2位月份(01-12) |
| MMM | 月份缩写(Jan) | |
| 日 | dd | 2位日期(01-31) |
| ddd | 星期缩写(Mon) | |
| 时 | HH | 24小时制(00-23) |
| hh | 12小时制(01-12) | |
| 分秒 | mm | 分钟(00-59) |
| ss | 秒(00-59) | |
| 毫秒 | zzz | 毫秒(000-999) |
| 上下午 | AP/ap | AM/PM 或 am/pm |
从字符串解析
// 从字符串解析 QString dateTimeString = "2023-10-15 14:30:00"; QDateTime parsedDateTime = QDateTime::fromString(dateTimeString, "yyyy-MM-dd HH:mm:ss"); // 检查解析是否成功 if (parsedDateTime.isValid()) { qDebug() << "解析成功:" << parsedDateTime; } else { qDebug() << "解析失败"; }
❹ 日期时间计算与比较
QDateTime dt = QDateTime::currentDateTime(); // 添加时间 QDateTime tomorrow = dt.addDays(1); // 加1天 QDateTime nextHour = dt.addSecs(3600); // 加3600秒(1小时) QDateTime nextMonth = dt.addMonths(1); // 加1个月 QDateTime nextYear = dt.addYears(1); // 加1年 // 减去时间 QDateTime yesterday = dt.addDays(-1); // 减1天 QDateTime prevMinute = dt.addSecs(-60); // 减60秒 // 计算时间差 QDateTime dt1 = QDateTime::fromString("2023-10-15 10:00:00", "yyyy-MM-dd HH:mm:ss"); QDateTime dt2 = QDateTime::fromString("2023-10-15 11:30:00", "yyyy-MM-dd HH:mm:ss"); qint64 secsDiff = dt1.secsTo(dt2); // 相差秒数:5400 qint64 secsDiff1 = dt2.secsTo(dt1); // 相差秒数:-5400 qint64 daysDiff = dt1.daysTo(dt2); // 相差天数:0(同一天) qint64 msecsDiff = dt1.msecsTo(dt2); // 相差毫秒数:5400000 // 比较操作 if (dt1 < dt2) { qDebug() << "dt1 在 dt2 之前"; } else if (dt1 == dt2) { qDebug() << "两个时间相同"; } else { qDebug() << "dt1 在 dt2 之后"; }
secsTo() 函数
|
特性 |
说明 |
|---|---|
|
功能 |
计算当前 |
|
函数签名 |
|
|
返回值 |
从当前时间到 |
|
返回值正负 |
如果
|
核心概念与用法
-
功能定义:
secsTo()方法返回从当前QDateTime对象到目标QDateTime对象 (other) 所经过的秒数。简单来说,就是执行other - 当前时间的操作 -
参数与返回值:它接受一个
const QDateTime &类型的参数,代表要比较的目标时间。返回值类型是qint64(一个有符号的64位整数),这确保了即使计算很长的时间跨度(例如几十年或几个世纪)也不会发生整数溢出 -
⚠️ 重要注意事项
-
返回值的正负含义:务必注意,返回值的正负表示了两个时间的先后关系。正数意味着目标时间 (
。例如,如果other) 在当前时间之后(未来);负数意味着目标时间在当前时间之前(过去)currentTime.secsTo(futureTime)返回 300,表示未来时间还有300秒到达。 -
与
msecsTo()的区别:secsTo()返回的是秒,而QDateTime还有一个msecsTo()方法,它返回的是毫秒(千分之一秒)。在处理需要更高精度的计时场景时(如性能分析),应选用msecsTo() -
时间有效性:在调用此方法前,最好确保参与计算的两个
QDateTime对象都是有效的(通过isValid()方法检查)。对无效的时间对象进行操作,结果将是未定义的
-

浙公网安备 33010602011771号