关注

3.1.4 时间魔法:QDate、QTime、QDateTime——Qt 的“年、月、日、时、分、秒”三剑客

1.内容介绍

上节课我们讲解了QTimer这个灵活的时间管家,是不是很厉害?这个时间管家管理的是时间的流逝,那你可能会想,时间该怎么存储呢?今天,我们就来看一下,这存储“年、月、日、时、分、秒”的三剑客吧!

2.讲解三剑客

Qt中的这三剑客呀,关系吗?那可是太好了!他们有着密切的联系,QDate记录日期,QTime记录时间,QDateTime不仅记录日期,而且还记录时间呢!是不是很厉害?在平常的代码中,他们齐心协力,让我们的代码变得更加完善。

首先,我们先来讲解一下老大——QDate。

1.讲解QDate

QDate嘛,他这个剑客,其实就像一个日历本一样,存储着日期。比如说,存储你的生日,就可以让他来帮你。

要有申请QDate这个剑客的资格,需要包含QDate这个头文件。

而我们要申请这样的一个QDate剑客呢,就需要用到下面的构造函数:

QDate date(2015, 4, 18);
//这里的构造函数就是这样的:第一个参数是年份,第二个参数是月份,第三个是日

如果我们要改变这个剑客的日期,我们可以使用setDate方法来改变。

date.setDate(2015, 7, 7);

然后,我们要让这个剑客的日期添加一些天数,我们就需要用到addDays这个方法,这样就能让QDate剑客添加一些日期了。这个返回的也是一个QDate,也就是说,我们要用另一个变量来存储,或者是直接覆盖。

QDate tomorrow = date.addDays(1);

当然,我们也可以给这个剑客的日期添加一些月份,或者是年份。

QDate next_month = date.addMonths(1);
QDate next_year = date.addYears(1);

那么我们如何从QDate剑客那里获取年月日呢?我们就要用year、month和day函数啦!

int year = date.year();
int month = date.month();
int day = date.day();

最后,QDate剑客还有一个绝技——获取当前的时间,我们通过currentDate这个静态方法,就能问到当前的时间。

QDate curDate = QDate::currentDate();

接下来,我们就来讲解老二——QTime。

2.讲解QTime

QTime这个剑客呢,他就像是个手表一般,存储着时间。要有申请这个剑客的资格,就需要包含QTime的头文件。

要申请QTime这个剑客,就需要使用以下的构造函数:

QTime time(8, 0, 0);
//第一个参数表示小时,第二个参数表示分钟,第三个参数表示秒数,当然你也可以添加第四个参数,为毫秒,这个可填可不填

而QTime这个剑客的很多函数,都是和QDate差不多的!所以我就不一一赘述了,就用一段代码来展示他的武艺吧!

time.setHMS(10, 0, 0); //设置这个剑客的时间的时分秒,当然第四个参数你也可以填写,是毫秒数
QTime next_second = time.addSecs(1); //让这个剑客的时间增加1秒钟,这个参数就是增加的秒数
QTime next_ms = time.addMSecs(1); //让这个剑客的时间增加1毫秒,这个参数就是增加的毫秒数
QTime hour = time.hour(); //问到这个剑客的小时
QTime minute = time.minute(); //问到这个剑客的分钟
QTime second = time.second(); //问到这个剑客的秒数
QTime ms = time.msec(); //问到这个剑客的毫秒数
QTime curTime = QTime::currentTime(); //绝技!获取当前时间

看,是不是很相似?所以说他们是兄弟嘛。

最后,我们讲解的就是最后一个剑客,QDateTime!他虽然是老三,但是他可是压轴登场!往下看,你就知道了!

3.讲解QDateTime

QDateTime这个剑客,他呀,日期时间全包!非常厉害!要有申请这个剑客的资格,就需要包含QDateTime这个头文件。并且有了这个头文件,QDate和QTime的头文件也都有了!

要申请QDateTime这样一个剑客,我们需要使用以下构造函数:

QDateTime dateTime(QDate(1976, 1, 8), QTime(9, 57, 0));
//这里就像是拼积木一般,先拼一个日期,再来一个时间

(眼睛灵活的同学可能已经发现这个时间的特别之处了)

而QDateTime这个剑客很多的函数,都是参照的QDate和QTime的!很多都是一模一样的。唯一不一样的就是那个绝技:获取当前时间。我们这里还是静态函数,函数名为currentDateTime。

不过,QDateTime就只有这些剑法吗?不!它还有一个老大和老二都没有的剑法!时间戳转化时间!时间戳是什么?时间戳其实并不复杂,它就是现在离1970年1月1日0时0分0秒的秒数或者是毫秒数。我们可以通过fromSecsSinceEpoch来把秒数时间戳转化成QDateTime,fromMSecsSinceEpoch来把毫秒数时间戳转化成QDateTime。(都是静态方法哦)

int sec = 86400; //人话:1天
int msec = 86400000; //人话:1天
QDateTime dateTime1 = QDateTime::fromSecsSinceEpoch(sec); //1970年1月2日0时0分0秒
QDateTime dateTime2 = QDateTime::fromMSecsSinceEpoch(msec); //1970年1月2日0时0分0秒

对了,这三剑客他们其实都拥有一个魔法盒——他们都可以把他们的时间转化成人类可读的字符串!接下来我们就来讲解这三个剑客的共用方法——toString。

4.讲解toString

toString这个方法嘛,它里面填的是一个字符串,这个字符串就是转化的格式。接下来,我们写一个代码,来举几个栗子🌰

QDate date(2015, 4, 18);
QTime time(8, 0, 0);
QDateTime dateTime(date, time);
QString dateStr = date.toString("yyyy-MM-dd"); //2015-04-18
QString timeStr = time.toString("hh:mm:ss"); //08:00:00
QString dateTimeStr = dateTime.toString("yyyy-MM-ss hh:mm:ss"); //2015-04-18 08:00:00

看出来了吧?这里的一些英文字母,比如yyyy,ss什么的,就是对应的年,月,日什么的。接下来我就来列一个表格,让大家清晰的看到每一个匹配符表示什么。

匹配符表示的含义举例
yyyy年份2015
MM月份04
dd天数18
hh小时08
mm分钟30
ss秒数00

而这些剑客手中的魔法盒,就会自动处理这些匹配符,一个一个的去匹配好,最后就转化好啦!

好啦,这节课就到这里。我们下节课再见,拜拜!

转载自CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/zyz150418/article/details/161778460

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--