两个类。QDate;QTime
其构造函数声明如下:
[cpp] view plain copy
- QDate()
- QDate(int y, int m, int d)
要注意的是,该构造函数可以接受两位数字的年份。即0-99.
一个是使用静态成员函数currentDate() ;另一个是使用静态函数fromString() 函数,这两个函数声明如下:
[cpp] view plain copy
- QDate currentDate()
- QDate fromString(const QString &string, const QString &format)
其中,format种可以使用的格式如下:
d | 表示天的数字,范围为 1~31,没有前置的0 |
dd | 表示天的数字,有前置的0,范围为01~31 |
ddd | 表示星期的简写,即Mon~Sun |
dddd | 表示星期的全写,即Monday~Sunday |
M | 表示月份的数字,没有前置的0,范围为1~12 |
MM | 表示月份的数字,有前置的0,范围为01~12 |
MMM | 表示月份的简写,范围为Jan~Dec |
MMMM | 表示月份的全写,范围为January~December |
yy | 表示两位数字的年份,即00~99 |
yyyy | 表示四位数字的年份,如2017 |
另外还要注意,QDate里的年月日都有相应的默认值。Year默认值为1900,Month默认值为1,Day默认值为1。比如:
[cpp] view plain copy
- QDate::fromString("1.30", "M.d"); // 1900 1.30
- QDate::fromString("20000110", "yyyyMMdd"); // 2000 01 10
- QDate::fromString("20000110", "yyyyMd"); // 2000 1 10
注意,没有0年,若未年份传入0,则被认为是无效的。
与fromString() 相对的,QDate还提供了一个toString() 方法,可以将QDate对象表示的日期按一定格式转化为一个字符串表示。
[cpp] view plain copy
- QString toString(const QString &format) const
[cpp] view plain copy
- QDate date(2017,3,21)
- date.toString("yyyy-MM-dd") //2017-03-21
注意,toString() 里的format中必须有分隔符,即"yyyyMMdd"是不支持的。
如果QDate表示的日期是无效的,则返回一个空字符串。
除了这些创建对象的函数,QDate还为我们提供了很多操作QDate对象的方法,比如判断日期是否有效的isValid(),判断某个年份是否是闰年的isLeapYear()等等。
QTime则表示了自凌晨以来的时分秒及毫秒的时间。
currentTime() 和 fromString() 按一定格式进行构造。但是,QTime表示的时间的精度取决于操作系统本身的精度,并不是所有的系统都能提供1ms级别的精度。
[cpp] view plain copy
- QTime::QTime()
- QTime::QTime(int h, int m, int s = 0, int ms = 0)
其中默认构造函数,创建出一个空(null)对象。注意,空时间对象和QTime(0,0,0,0)的区别。一个空时间对象的isNull() 返回true,isValid() 返回false。而QTime(0,0,0,0)是一个有效的时间,它表示零点。
若为构造函数传入了相关参数,则传入的参数必须满足一定要求。即 h必须在0~23之间,m和s必须在0~59之间,ms必须在0~999之间。
[cpp] view plain copy
- QTime currentTime()
- QTime fromString(const QString &string, const QString &format)
其中,format中可以使用的格式及含义如下:
h | 没有前置0的小时数字,即0~23,或者 1~12,如果显示AM/PM的话 |
hh | 有前置0的小时数字,即00~23,或者01~12,如果显示AM/PM的话 |
m | 没有前置0的分钟数字,0~59 |
mm | 有前置0的分钟数字,00~59 |
s | 没有前置0的秒数,0~59 |
ss | 有前置0的秒数,00~59 |
z | 没有前置0的毫秒,0~999 |
zzz | 有前置0的毫秒,000~999 |
AM/PM | 显示AM/PM |
am/pm | 显示am/pm |
[cpp] view plain copy
- QTime time = QTime::fromString("1.30", "m.s");
- // time is 00:01:30.000
[cpp] view plain copy
- QTime time(14,13,9,42)
- time.toString("hh:mm:ss.zzz") //14:13:09.042
另外,QTime除了和QDate一样,为我们提供了大量方便的创建、设置、获取函数外,还为我们提供了三个用于简单计时的方法。即:
[cpp] view plain copy
- int elapsed() const
- int restart()
- void start()
elapsed() 返回自从上次调用start() 或 restart() 之后的毫秒数。注意,如果自从上次调用start() 之后,超过了24小时,那么该数字会回归到0,从新计数。
start() 会将该对象设置为当前时间,然后开始计时。
restart() 将该对象设置为当前时间,然后返回自从上次调用start() 或 restart() 后所经历的毫秒数。该方法可以原子性的完成这两件事,所以非常适合重复计数。即先调用一下start() 开启计时,之后每次计时就调用一下restart() 即可。但和elapsed() 类似,在上次调用start() 或 restart() 24小时后,该计时会回归到0。
提供了QDateTime类。顾名思义,该类是QDate和QTime功能的结合,可以使用一个对象同时表示日期和时间。其使用方式也和上面讲的两个类大同小异,在此就不展开讲解了,有需要的同学,可以自行学习Qt帮助文档即可