第四章 QTime、QDate、QDateTime和QCalendarWidget

目录

参考:

一、表示日期时间数据的类

1. QTime类

2. QDate类

3. QDateTime类

4. 日期时间数据与字符串的转换

 二、日期时间数据的界面组件

1. QDateTimeEdit及其子类

2. QCalendarWidget类

 三、代码实现


参考:

        《Qt6 C++开发指南》

        具体代码实现看下面视频讲解:

4.7日期时间数据_哔哩哔哩_bilibiliicon-default.png?t=N7T8https://www.bilibili.com/video/BV1km4y1k7CW?p=31&vd_source=9f6a57780f9760d9cdd025dbc388f3ba

一、表示日期时间数据的类

1. QTime类

        QTime

        构造函数可以初始化时间数据:

                QTime::QTime(int h, int m, int s = 0, int ms = 0);
        静态函数 可以初始化为系统的当前时间:
                QTime::currentTime();

QTime 类的主要接口函数
函数原型功能
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());
}

2. QDate类

        QDate

        静态函数:

                        QDate::currentDate()获取系统的当前日期;

                        bool QDate::isLeapYear(inr year) 判断某年是否是闰年。 


QDate 类的主要接口函数
函数原型
功能
int year()
返回当前日期的年数据
int month()
返回当前日期的月数据,数值为 112
int day()
返回当前日期的日数据,数值为 131
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 表示星期天
}

3. QDateTime类

        QDateTime

        静态函数:

        QDateTime QDateTime::currentDateTime()        //返回系统的当前时间,本地时间

        QDateTime QDateTime::currentDateTimeUtc()  //返回系统的当前时间,Utc时间


QDateTime 类的主要接口函数
函数原型
功能
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()); 
}

4. 日期时间数据与字符串的转换

        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
天,不补零显示,131
dd
天,补零显示,0131
M
月,不补零显示,112
MM
月,补零显示,0112
yy
年,两位显示,0099
yyyy
年,4 位显示,如 2016
h
小时,不补零显示,023 112(如果显示 AM/PM
hh小时,补零两位显示,0023 0112(如果显示 AM/PM
H小时,不补零显示,023(即使显示 AM/PM
HH小时,补零显示,0023(即使显示 AM/PM
m
分钟,不补零显示,059
mm分钟,补零显示,0059
s秒,不补零显示,059
ss秒,补零显示,0059
z
毫秒,不补零显示,0999
zzz毫秒,补零 3 位显示,000999
AP A使用 AM/PM 显示
ap a使用 am/pm 显示

 二、日期时间数据的界面组件

1. QDateTimeEdit及其子类

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) //日期或时间发生变化时

2. QCalendarWidget类

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() 实现选择日期变化。

 三、代码实现

        具体代码实现请看书本和视频讲解。

  • 28
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值