目录
? ? ? ? 《Qt6 C++开发指南》
? ? ? ? 具体代码实现看下面视频讲解:
? ? ? ? QTime
? ? ? ? 构造函数可以初始化时间数据:
????????????????QTime::QTime(int h, int m, int s = 0, int ms = 0);? ? ? ? 静态函数 可以初始化为系统的当前时间:????????????????QTime::currentTime();
函数原型 | 功能 |
int hour()
| 返回当前时间的小时数据 |
int minute()
| 返回当前时间的分钟数据 |
int second()
| 返回当前时间的秒数据 |
int msec()
| 返回当前时间的毫秒数据 |
bool setHMS(int h, int m, int s, int ms = 0)
| 设置时间的小时、分钟、秒、毫秒数据 |
int msecsSinceStartOfDay()
| 返回从时间 00:00:00 开始的毫秒数 |
QTime addSecs(int s)
| 当前时间延后 s 秒之后的时间。s 为正表示延后,s 为负表示提前 |
int secsTo(QTime t)
| 返回当前时间与一个 QTime 对象 t 相差的秒数 |
QString toString(const QString &format)
| 将当前时间按 format 设置的格式转换为字符串 |
注意:红色字体的接口函数在下面代码有训练
下面代码涉及到了QTime的构造、静态函数,主要函数接口的使用。
void Widget::on_btnDebugTime_clicked()
{
QTime TM1(13,24,5); //定义变量,初始化设置时间(构造函数)
QString str= TM1.toString("HH:mm:ss"); //转化为format格式的字符串
qDebug("Original time= %s", str.toLocal8Bit().data());
QTime TM2= TM1.addSecs(150); //延后 150 秒
str= TM2.toString("HH:mm:ss");
qDebug("150s later, time= %s", str.toLocal8Bit().data());
TM2= QTime::currentTime(); 获取当前时间(静态函数)
str= TM2.toString("HH:mm:ss zzz");
qDebug("Current time= %s", str.toLocal8Bit().data());
qDebug("Hour= %d", TM2.hour());
qDebug("Minute= %d", TM2.minute());
qDebug("Second= %d", TM2.second());
qDebug("MSecond= %d",TM2.msec());
}
? ? ? ? QDate
? ? ? ? 静态函数:
? ? ? ? ? ? ? ? ? ? ? ? QDate::currentDate()获取系统的当前日期;
? ? ? ? ? ? ? ? ? ? ? ? bool QDate::isLeapYear(inr year) 判断某年是否是闰年。?
函数原型
| 功能 |
int year()
| 返回当前日期的年数据 |
int month()
| 返回当前日期的月数据,数值为 1~12 |
int day()
| 返回当前日期的日数据,数值为 1~31 |
int dayOfWeek()
| 返回当前日期是星期几,数字 1 表示星期一,数字 7 表示星期天 |
int dayOfYear()
| 返回当前日期在一年中是第几天,数字 1 表示第一天 |
bool setDate(int year, int month, int day)
| 设置日期的年、月、日数据 |
void getDate(int
*
year, int
*
month, int
*
day)
| 通过指针变量,返回当前日期的年、月、日数据 |
QDate addYears(int nyears)
| 返回一个 QDate 变量,其日期是在当前日期基础上加 nyears 年 |
QDate addMonths(int nmonths)
| 返回一个 QDate 变量,其日期是在当前日期基础上加 nmonths 个月 |
QDate addDays(qint64 ndays)
| 返回一个 QDate 变量,其日期是在当前日期基础上加 ndays 天 |
qint64 daysTo(QDate d)
| 返回当前日期与一个 QDate 变量 d 相差的天数。如果 d 值早于当前日期,返回值为负 |
QString toString(const QString &format)
| 将当前日期按 format 设置的格式转换为字符串 |
注意:红色字体的接口函数在下面代码有训练
下面代码涉及到了QDate的构造、静态函数,主要函数接口的使用。
void Widget::on_btnDebugDate_clicked()
{
QDate DT1(2021,7,6); //初始化日期
QString str= DT1.toString("yyyy-MM-dd");
qDebug("DT1= %s", str.toLocal8Bit().data());
QDate DT2;
DT2.setDate(2021,8,25); //设置日期
str= DT2.toString("yyyy-MM-dd");
qDebug("DT2= %s",str.toLocal8Bit().data());
qDebug("Days between DT2 and DT1= %d", DT2.daysTo(DT1));//DT2 与 DT1 相差的天数
DT2= QDate::currentDate(); //获取当前日期
str= DT2.toString("yyyy-MM-dd");
qDebug("Current date= %s", str.toLocal8Bit().data());
qDebug("Year= %d", DT2.year());
qDebug("Month= %d", DT2.month());
qDebug("Day= %d", DT2.day());
qDebug("Day of week= %d",DT2.dayOfWeek()); //1 表示星期一,7 表示星期天
}
? ? ? ? QDateTime
? ? ? ? 静态函数:
? ? ? ? QDateTime QDateTime::currentDateTime()????????//返回系统的当前时间,本地时间
????????QDateTime QDateTime::currentDateTimeUtc()? //返回系统的当前时间,Utc时间
函数原型
| 功能 |
QDate date()
| 返回当前日期时间数据的日期数据 |
QTime time()
| 返回当前日期时间数据的时间数据 |
qint64 toMSecsSinceEpoch()
| 返回与 UTC 时间 1970-01-01T00:00:00.000 相差的毫秒数 |
void setMSecsSinceEpoch(qint64 msecs)
| 设置与 UTC 时间 1970-01-01T00:00:00.000 相差的毫秒数 msecs 作为当前的日期时间数据 |
qint64 toSecsSinceEpoch()
| 返回与 UTC 时间 1970-01-01T00:00:00.000 相差的秒数 |
void setSecsSinceEpoch(qint64 secs)
|
设置与
UTC
时间
1970-01-01T00:00:00.000
相差的秒数
secs
作为当前
的日期时间数据
|
QString toString(const QString &format)
| 将当前日期时间按 format 设置的格式转换为字符串 |
QDateTime toUTC()
| 将当前时间转换为 UTC 时间 |
注意:红色字体的接口函数在下面代码有训练
下面代码涉及到了QDateTime的构造、静态函数,主要函数接口的使用。
void Widget::on_btnDebugDateTime_clicked()
{
QDateTime DT1= QDateTime::currentDateTime(); //系统当前日期时间
QString str= DT1.toString("yyyy-MM-dd hh:mm:ss");
qDebug("DT1= %s",str.toLocal8Bit().data());
QDate dt= DT1.date(); //日期部分
str= dt.toString("yyyy-MM-dd");
qDebug("DT1.date()= %s",str.toLocal8Bit().data());
QTime tm= DT1.time(); //时间部分
str= tm.toString("hh:mm:ss zzz");
qDebug("DT1.time()= %s",str.toLocal8Bit().data());
qint64 MS= DT1.toSecsSinceEpoch(); //转换为秒数
qDebug("DT1.toSecsSinceEpoch()= %lld",MS);
MS += 120;
DT1.setSecsSinceEpoch(MS); //加 120 秒以后
str= DT1.toString("yyyy-MM-dd hh:mm:ss");
qDebug("DT1+120s= %s",str.toLocal8Bit().data());
}
????????QTime、 QDate 和 QDateTime 都有一个函数 toString() ,用于将当前的日期时间数据转换为字 符串。例如,QDateTime 的函数 toString() 的一种常用的函数原型定义如下:QString QDateTime::toString(const QString &format, QCalendar cal = QCalendar())其中, format 是格式化字符串,cal 是日历类型,使用默认值就可以 。????????QTime、 QDate 和 QDateTime 都有静态函数 fromString() ,用于将字符串转换为相应类的对象。 例如,静态函数 QDateTime::fromString() 的一种常用的函数原型定义如下:QDateTime QDateTime::fromString(const QString &string, const QString &format,QCalendar cal = QCalendar())????????其中, string 是字符串表示的日期时间,format 是日期时间字符串的格式定义,cal 是日历类型 。
?用于表示日期时间的常用格式字符及其含义
格式字符 | 含义 |
d
| 天,不补零显示,1~31 |
dd
| 天,补零显示,01~31 |
M
| 月,不补零显示,1~12 |
MM
| 月,补零显示,01~12 |
yy
| 年,两位显示,00~99 |
yyyy
| 年,4 位显示,如 2016 |
h
| 小时,不补零显示,0~23 或 1~12(如果显示 AM/PM) |
hh | 小时,补零两位显示,00~23 或 01~12(如果显示 AM/PM) |
H | 小时,不补零显示,0~23(即使显示 AM/PM) |
HH | 小时,补零显示,00~23(即使显示 AM/PM) |
m
| 分钟,不补零显示,0~59 |
mm | 分钟,补零显示,00~59 |
s | 秒,不补零显示,0~59 |
ss | 秒,补零显示,00~59 |
z
| 毫秒,不补零显示,0~999 |
zzz | 毫秒,补零 3 位显示,000~999 |
AP 或 A | 使用 AM/PM 显示 |
ap 或 a | 使用 am/pm 显示 |
QDateTimeEdit 的常用接口函数就是读取或设置日期时间数据的函数,这些函数定义如下:????????QDateTime dateTime() //返回编辑框的日期时间数据????????void setDateTime(const QDateTime &dateTime) //设置日期时间数据????????QDate date() //返回编辑框的日期数据????????void setDate(QDate date) //设置日期数据????????QTime time() //返回编辑框的时间数据????????void setTime(QTime time) //设置时间数据QDateTimeEdit 有如下 3 个信号,信号被发射的时机见注释????????void dateChanged(QDate date) //日期发生变化时????????void timeChanged(QTime time) //时间发生变化时????????void dateTimeChanged(const QDateTime &datetime) //日期或时间发生变化时
QCalendarWidget 的几个常用接口函数定义如下,函数的作用见注释。????????void showToday() //显示系统当前日期的月历????????void showSelectedDate() //显示所选日期的月历????????QDate selectedDate() //返回选择的日期????????void setSelectedDate(QDate date) //设置选择的日期QCalendarWidget 定义了 4 个信号,其函数原型定义如下,信号发射时机见注释。????????void activated(QDate date) //在日历组件上按 Enter 键,或双击一个日期时????????void clicked(QDate date) //在日历组件上点击一个有效日期时????????void currentPageChanged(int year, int month) //当前显示的月历变化时????????void selectionChanged() //当前选择的日期变化时????????选择的日期变化时,QCalendarWidget 会发射 selectionChanged() 信号,可以通过点击实现选择日期变化,或者调用函数 setSelectedDate() 实现选择日期变化。
????????具体代码实现请看书本和视频讲解。