qt获取系统时间函数(qt获取系统当前毫秒级时间)

qt获取系统时间函数(qt获取系统当前毫秒级时间)

2.6 时间日期处理

2.6.1 QDateTime类于QDateTimeEdit控件介绍

QDateTime类提供了日期和时间相关处理函数,相当于组合的QDate和QTime类。

以下将分别介绍QDateTimeEdit控件和QDateTime类常用的一些成员函数。

QDateTimeEdit控件介绍

头文件

#include <QDateTimeEdit>

1.QDateTimeEdit构造函数

QDateTimeEdit(QWidget *parent = Q_NULLPTR)

QDateTimeEdit(const QDateTime &datetime, QWidget *parent = Q_NULLPTR)

QDateTimeEdit(const QDate &date, QWidget *parent = Q_NULLPTR)

QDateTimeEdit(const QTime &time, QWidget *parent = Q_NULLPTR)

QDateTimeEdit支持传入QDateTime、QDate、QTime类作为形参。其中QDateTime类用于获取本地系统的时间和日期相关信息,QDate用于获取本地系统的日期相关信息,QTime用于获取系统时间,一般用与测量时间的跨度。

三种形参传入方式使用示例:

#include <QApplication>

#include <QDate>

#include <QDateTimeEdit>

#include <QTime>

#include <QHBoxLayout>

#include <QVBoxLayout>

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

QWidget *window = new QWidget;

QDateTimeEdit *dat1 = new QDateTimeEdit(QDate::currentDate()); //获取当前系统日期

QDateTimeEdit *dat2 = new QDateTimeEdit(QTime::currentTime());//获取当前系统时间

QDateTimeEdit *dat3 = new QDateTimeEdit(QDateTime::currentDateTime());//获取当前系统时间日期

QVBoxLayout *layout = new QVBoxLayout;

layout->addWidget(dat1);

layout->addWidget(dat2);

layout->addWidget(dat3);

window->setLayout(layout);

window->show();

return a.exec();

}

图2-6-2 时间日期显示

boocalendarPopup() const //获取enable属性

void setCalendarPopup(booenable) //设置enable属性

示例:

QDateTimeEdit *dat = new QDateTimeEdit(QDateTime::currentDateTime());

dat->setCalendarPopup(true);

3.设置QDateTimeEdit弹出的日历小部件

QCalendarWidget *QDateTimeEdit::calendarWidget() const //获取QDateTimeEdit弹出的日历小部件

void QDateTimeEdit::setCalendarWidget(QCalendarWidget *calendarWidget) //设置日历小部件

4.设置输入日期的最大最小范围

QDate maximumDate()const //获取可输入的最大日期

void setMaximumDate(const QDate &max) //设置可输入的最大日期

void clearMaximumDate() //清除设置,还原默认值

QDate minimumDate() const //获取可输入的最小日期

void setMinimumDate(const QDate &min) //设置可输入的最小日期

void clearMinimumDate()//清除设置,还原默认值

以上函数主要是针对输入的日期进行限制。默认情况下输入的最大日期为7999年12月31日。

示例:

QDateTimeEdit *dat = new QDateTimeEdit(QDateTime::currentDateTime());

dat->setMaximumDate(QDate(2016,12,10)); //设置日期的最大范围为2016.12.10

dat->setMinimumDate(QDate(2015,12,10)); //设置日期的最小范围为2015.12.10

5.设置输入时间的最大最小范围

QTime maximumTime() const

void setMaximumTime(const QTime &max)

void clearMaximumTime()

QTime minimumTime() const

void setMinimumTime(const QTime &min)

void clearMinimumTime()

以上函数主要针对输入的时间进行限制。

示例:

QDateTimeEdit *dat = new QDateTimeEdit(QTime::currentTime());

dat->setMaximumTime(QTime(10,30,30,30)); //最大时间范围。参数分别为:时、分、秒、毫秒

dat->setMinimumTime(QTime(8,30,30,30)); //最小时间范围。

6.设置输入日期时间的最大最小范围

QDateTime maximumDateTime() const

void setMaximumDateTime(const QDateTime &dt)

void clearMaximumDateTime()

QDateTime minimumDateTime() const

void setMinimumDateTime(const QDateTime &dt)

void clearMinimumDateTime()

以上函数可以对输入的日期和时间进行限制。

7.设置输入范围的便捷函数

setDateRange(const QDate &min, const QDate &max)

setDateTimeRange(const QDateTime &min, const QDateTime &max)

void setTimeRange(const QTime &min, const QTime &max)

以上三个函数类似于4、5、6小节介绍设置范围的函数。

QDate date() const //获取当前显示的日期

void setDate(const QDate &date) //设置当前显示的日期

[signal] void QDateTimeEdit::dateChanged(const QDate &date)

QDateTime dateTime() const

void setDateTime(const QDateTime &dateTime)

[signal] void QDateTimeEdit::dateTimeChanged(const QDateTime &datetime)

QTime time() const

void setTime(const QTime &time)

void timeChanged(const QTime &time)

11.设置日期和时间显示的格式

QString displayFormat() const

void setDisplayFormat(const QString &format)

常用的格式如下:

yyyy-MM-dd h:m:s ap

yyyy-MM-ddhh:mm:ss

d表示日,M表示月,y表示年,h表示小时,m表示分钟,s表示秒。

示例:

QDateTimeEdit *dat = new QDateTimeEdit(QDateTime::currentDateTime());

//dat->setDisplayFormat(“yyyy-MM-dd hh:mm:ss”);

dat->setDisplayFormat(“yyyy-MM-dd h:m:s ap”);

图2-6-4 两种不同的显示格式

QDateTime类介绍

1.构造QDateTime对象

QDateTime(const QDate &date)

QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime)

QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec, int offsetSeconds)

QDateTime(const QDate &date, const QTime &time, const QTimeZone &timeZone)

QDateTime(const QDateTime &other) //复制构造函数

QDateTime构造函数支持传入的类型较多。主要涉及到QDate和QTime。后面将会详细介绍QDate和QTime。

2.获取系统时间和日期

[static] QDateTime QDateTime::currentDateTime() //本地时间

[static] QDateTime QDateTime::currentDateTimeUtc() //世界协调时间UTC

示例:

QDateTime time1(QDateTime::currentDateTime()); //获取当前系统时间

QDateTime time2(QDateTime::currentDateTimeUtc()); //获取当前UTC世界统一时间

qDebug()<<time1.toString(“yyyy-M-d h:m:s:z”); //打印结果:”2016-10-24 12:9:57:690″

qDebug()<<time2.toString(“yyyy-M-d h:m:s:z”); //打印结果:”2016-10-24 4:9:57:691″

3.调整时间和日期

QDateTime addYears(int nyears) const //调整年

QDateTime addMonths(int nmonths) const //调整月份

QDateTime addDays(qint64 ndays) const //调整日

QDateTime addSecs(qint64 s) const //调整秒

QDateTime addMSecs(qint64 msecs) const //调整毫秒

示例:

QDate date(2016,10,18); //构造日期

QTime time(10,12,13,14); //构造时间

QDateTime datetime(date,time);

qDebug()<<datetime.toString(“yyyy-M-d h:m:s:z”); //输出结果:”2016-10-18 10:12:13:14″

datetime=datetime.addDays(2); //在当前时间基础上增加2天

datetime=datetime.addYears(-1); //在当前时间基础上减去1年

qDebug()<<datetime.toString(“yyyy-M-d h:m:s:z”); //输出结果:”2015-10-20 10:12:13:14″

4.单独设置时间和日期

void QDateTime::setDate(const QDate &date) //设置日期

QDate QDateTime::date() const //获取日期

void QDateTime::setTime(const QTime &time) //设置时间

QTime QDateTime::time() const //获取时间

设置之后可以使用以下函数判断包含的时间是否合法:

booisNull() const //判断时间日期是否为空

booisValid() const //判断时间日期是否合法

5.将时间日期转为字符串格式返回

String toString(const QString &format) const

QString toString(Qt::DateFormat format = Qt::TextDate) const

详细格式说明分别参考2.6.2节和2.6.3节对应的toString函数。

6.获取当前时间对应的世界标准时间

QDateTime QDateTime::toUTC() const

示例:

QDate date(2016,10,18);

QTime time(10,12,13,14);

QDateTime datetime(date,time);

qDebug()<<datetime.toString(“yyyy-M-d h:m:s:z”); //输出结果:”2016-10-18 10:12:13:14″

datetime=datetime.toUTC();

qDebug()<<datetime.toString(“yyyy-M-d h:m:s:z”); //输出结果:”2016-10-18 2:12:13:14″

2.6.2 QDate类与QDateEdit控件介绍(日期处理)

//头文件

#include <QDateEdit>

#include <QDate>

以下将介绍QDate常用的相关成员函数。

1.构造函数

QDate()

QDate(int y, int m, int d)

构造函数中可以直接填入年月日参数。后面也可以使用setDate函数进行修改。

示例:

QDate date(2016,5,12);

qDebug()<<date.toString(); //输出结果:”周四 5月 12 2016″

2.获取当前系统日期

[static] QDate QDate::currentDate()

示例:

QDate date(QDate::currentDate());

QDateEdit dateEdit(date);

dateEdit.show();

图2-6-5 显示本地系统日期

3.调整日期

QDate addDays(qint64 ndays) const //调整日

QDate addMonths(int nmonths) const //调整月

QDate addYears(int nyears) const //调整年

以上函数用于在本身存在的日期上增加或者减少时间。比如:QDate本身包含的年份为2016年,调用addYears(1)函数后,QDate包含的年份就变为2017年。添加成功后返回QDate对象。

示例:

QDate date(2016,2,10);

date=date.addYears(1); //增加1年

date=date.addMonths(4); //增加4个月

date=date.addDays(-5); //减去5天

qDebug()<<date.toString(“yyyy-MM-dd”); //输出结果:”2017-06-05″

4.获取经过日期与剩下日期相关信息

int day() const //返回本月的日期,范围:1日-31日。返回0表示无效

int year() const //返回当前年份

int month() const //返回当前月份

int dayOfWeek() const //返回星期,范围:星期1至7。

int dayOfYear() const //返回本年经过的总天数。范围:1到365(平年)或366(闰年)。

int daysInMonth() const //返回本月总天数。范围:28日至31日。

int daysInYear() const //返回本年总天数。范围:365 或者 366。

示例:

QDate date(2016,2,10);

qDebug()<<“当前日期:”<<date.toString(“yyyy-MM-dd”);

qDebug()<<“当前年:”<<date.year();

qDebug()<<“当前月:”<<date.month();

qDebug()<<“本月号数:”<<date.day();

qDebug()<<“星期:”<<date.dayOfWeek();

qDebug()<<“本年已经过去:”<<date.dayOfYear()<<“天”;

qDebug()<<“本月总天数:”<<date.daysInMonth();

qDebug()<<“本年总天数:”<<date.daysInYear();

输出结果:

当前日期: “2016-02-10”

当前年: 2016

当前月: 2

本月号数: 10

星期: 3

本年已经过去: 41 天

本月总天数: 29

本年总天数: 366

5.判断两个日期之间相差的天数

qint64 QDate::daysTo(const QDate &d) const

示例:

QDate d1(2016, 5, 17); // May 17, 2016

QDate d2(2016, 5, 20); // May 20, 2016

qDebug()<<d1.daysTo(d2); // returns 3

qDebug()<<d2.daysTo(d1); // returns -3

6.获取当前的日期

void QDate::getDate(int *year, int *month, int *day) const

示例:

int year,month,day;

QDate date(2016,2,10);

date.getDate(&year,&month,&day);

qDebug()<<year<<“-“<<month<<“-“<<day; //输出结果:2016 – 2 – 10

7.判断日期的合法性

booQDate::isNull() const //判断日期是否为空。日期为空将返回true

booQDate::isValid() const //判断日期是否有效。日期有效将返回true

示例:

QDate dat1(2016,2,10);

qDebug()<<dat1.isValid();//true

QDate dat2(2016,55,10);

qDebug()<<dat2.isValid();//false

Qdate还提供了一个isValid静态函数用于判断指定日期是否合法:

[static] booQDate::isValid(int year, int month, int day)

示例:

qDebug()<<QDate::isValid(2017, 10, 17);//true

qDebug()<<QDate::isValid(2016, 13, 17);//false。月份错误

qDebug()<<QDate::isValid(2002, 10, 33);//false。日期错误

8.将日期转为字符串返回

QString toString(const QString &format) const

QString toString(Qt::DateFormat format = Qt::TextDate) const

toString是一个重载函数,支持两种输入格式。转换之后将返回QString。

format格式说明:

d

数字前不补0 。范围(1号至31号)

dd

数字前自动补0 。范围(01号至31号)

ddd

缩写为本地化名称。比如:”周二”

dddd

本地化名称全称。比如:”星期二”

M

数字前不补0 。比如:(1月至12月)

MM

数字前自动补0。比如:(01月至12月)

MMM

缩写本地化月名字。比如:”2月”

MMMM

本地化名称全称。 比如:”二月”

yy

表示本年的两位数 范围(00 至 99)。比如:2016 返回16。

yyyy

表示本年的四位数。比如:2016就返回2016

Qt::DateFormat枚举值:

Qt::TextDate

输出格式示例:”周二 2月 9 2016″

Qt::ISODate

输出格式示例:”2016-02-09″

Qt::SystemLocaleShortDate

输出格式示例:”2016/2/9″

Qt::SystemLocaleLongDate

输出格式示例:”2016年2月9日”

示例:

QDate date(2016,10,24);

qDebug()<<date.toString(“yyyy MMMM dddd”); //结果:”2016 十月 星期一”

qDebug()<<date.toString(“yyyy-M-d”); //结果:”2016-10-24″

qDebug()<<date.toString(Qt::TextDate); //结果:”周一 10月 24 2016″

qDebug()<<date.toString(Qt::ISODate); //结果:”2016-10-24″

qDebug()<<date.toString(Qt::SystemLocaleShortDate);//结果:”2016/10/24″

qDebug()<<date.toString(Qt::SystemLocaleLongDate);//结果:”2016年10月24日”

9.标准日期与天数之间的转换

qint64 toJulianDay() const //返回日期对应的天数。

[static] QDate QDate::fromJulianDay(qint64 jd) //将天数转为QDate对象返回。

示例:

QDate date(2016,10,24);

qDebug()<<date.toJulianDay(); //结果:2457686

date=QDate::fromJulianDay(2457687);

qDebug()<<date.toString(“yyyy-M-d”); //结果:”2016-10-25″

10.Qdate支持的重载运算符

boooperator!=(const QTime &t) const

boooperator<(const QTime &t) const

boooperator<=(const QTime &t) const

boooperator==(const QTime &t) const

boooperator>(const QTime &t) const

boooperator>=(const QTime &t) const

示例:

QDate dat1(QDate::currentDate());

QDate dat2(2016,11,1);

if(dat1>=dat2) //比较日期

{

}

2.6.3 QTime类与QTimeEdit控件介绍(时间处理)

QTime类提供了时钟时间功能,操作的是本地时间,不区分时区,它可以从系统时钟中读取当前的时间,并提供比较时间和操作时间的函数。QTime操作的是24小时时钟格式,没有AM/PM概念。QTime精确性取决于操作系统的精确性,不是所有的操作系统都有毫秒级的精确度。hour()、minute()、second()和msec()函数提供了对时、分、秒和毫秒单位时间的访问方法。QTime可以使用start()、restart()和elapsed()函数配合测量经过的某一段时间。QTime类也提供了一整套的操作符来比较两个QTime对象。

QTimeEdit控件用于显示从QTime对象中读取的时间。QTimeEdit的构造函数中可以直接传入QTime对象。

QTime time(QTime::currentTime());

QTimeEdit timeEdit(time);

timeEdit.show();

图2-6-6 使用QTimeEdit显示系统时间

1.构造QTime对象

QTime()

QTime(int h, int m, int s = 0, int ms = 0)

示例:

QTime time(13,10,10,10); //传入的参数:时、分、秒、毫秒

qDebug()<<time.toString(); //输出结果:”13:10:10″

2.获取系统时间

[static] QTime QTime::currentTime()

示例:

QTime time(QTime::currentTime()); //传入的参数:时、分、秒、毫秒

qDebug()<<time.toString(); //输出时间:”20:11:55″

3.调整时间

QTime addMSecs(int ms) const

QTime addSecs(int s) const

addMSecs和addSecs函数用于在当前时间基础上增加或者减少秒和毫秒的值。

示例:

QTime time(6,10,10,10); //构建QTime对象

time=time.addMSecs(100); //增加100毫秒

time=time.addSecs(-100); //减少100秒

qDebug()<<time.toString(“AP h:m:s:z”); //输出结果:”上午 6:8:30:110″

4.判断时间的合法性

booQTime::isNull() const //判断时间是否为空。为空将返回true

booQTime::isValid() const //判断时间是否有效。有效将返回true

QTime还提供了一个isValid静态函数用于判断指定时间的可用性:

booQTime::isValid(int h, int m, int s, int ms = 0)

示例:

QTime::isValid(21, 10, 30); // returns true

QTime::isValid(22, 5, 62); // returns false

5.获取时间

int QTime::hour() const //小时:范围 0 to 23

int QTime::minute() const //分钟:范围 0 to 59

int QTime::second() const //秒 :范围 0 to 59

int QTime::msec() const //毫秒:范围 0 to 999

示例:

QTime time(6,10,11,12);

qDebug()<<time.hour(); //输出结果:6

qDebug()<<time.minute();//输出结果:10

qDebug()<<time.second();//输出结果:11

qDebug()<<time.msec(); //输出结果:12

6.获取当前时间的毫秒数

int msecsTo(const QTime &t) const

输出范围在-86400000和86400000ms之间。

7.设置时间

boosetHMS(int h, int m, int s, int ms = 0)

8.将当前时间转为字符串返回

QString toString(const QString &format) const

QString toString(Qt::DateFormat format = Qt::TextDate) const

ToString是一个 重载函数,可以传入两种不同的格式进行转换时间。下面介绍两种传入的格式。

format格式说明:

h

显示小时(0-23)

hh

显示两位数的小时(00-23)

m

显示分钟(0-59)

mm

显示分钟(00-59)

s

显示秒(0-59)

ss

显示秒(00-59)

z

显示毫秒(0-999)

zzz

显示毫秒(000-999)

AP

大写字母表示上午/下午(AM/PM)

ap

小写字母表示上午/下午(am/pm)

Qt::DateFormat常用的枚举介绍:

Qt::TextDate

时间样式:”22:10:11″

Qt::ISODate

时间样式:”22:10:11″

Qt::SystemLocaleShortDate

时间样式:”22:10″

Qt::SystemLocaleLongDate

时间样式:”22:10:11″

图2-6-6 时间显示样式

9.测量某一段经过的时间

void QTime::start()

int QTime::restart()

int QTime::elapsed() const

start():开始计时。

restart():重新开始计时,将经过的时间设置为当前时间,并返回经过的毫秒数。

elapsed():返回开始启动后经过的毫秒数。

一般使用start()和elapsed()测量某一段经过的时间。restart()可以用来重复测量。

测量某段代码消耗的时间:

QTime time;

time.start(); //开始计时

for(int i=0;i<10000;i )

{

for(int j=0;j<10000;j )

{

}

}

int count=time.elapsed(); //读出经过的时间

qDebug()<<“消耗的时间:”<<count<<“ms”; //输出结果:消耗的时间: 242 ms

使用restart()循环测量示例:

QTime time;

time.start(); //开始计时

for(int i=0;i<10000;i )

{

for(int j=0;j<10000;j )

{

}

}

//输出第1次测量结果

qDebug()<<“消耗的时间:”<<time.restart()<<“ms”;

for(int i=0;i<10000;i )

{

for(int j=0;j<10000;j )

{

}

}

//输出第2次测量结果

qDebug()<<“消耗的时间:”<<time.restart()<<“ms”; //输出结果:消耗的时间: 242 ms

for(int i=0;i<10000;i )

{

for(int j=0;j<10000;j )

{

}

}

//输出第3次测量结果

qDebug()<<“消耗的时间:”<<time.restart()<<“ms”; //输出结果:消耗的时间: 242 ms

2.6.4 Qtimer定时器介绍

QTimer类提供了定时器功能,在指定的时间超时之后可以发出超时信号,可以单次或者重复定时。 QTimer使用方法比较简单:先创建一个QTimer定时器,使用start()函数设定定时的时间并开始计时。然后将timeout()信号连接到适当的槽函数。当定时的时间到达后,QTimer将会发出timeout()信号。注意:定时器的时间单位为毫秒(ms)。

创建一个重复的定时器:

QTimer *timer = new QTimer(this); //创建定时器

connect(timer, SIGNAL(timeout()), this, SLOT(update())); //关联槽函数

timer->start(1000); //1000毫秒

创建成功后,每隔1000毫秒timer定时器将会发出一个timeout()信号。

下面介绍几个QTimer常用的成员函数。

1.修改定时器的时间

int interval() const //返回当前定时器的超时时间

void setInterval(int msec) //设置定时器的超时时间

2.设置定时器单发和重复属性

booisSingleShot() const

void setSingleShot(boosingleShot) //设置定时器的单发和重复属性

默认情况下,定时器属性为false,支持重复超时触发。设置singleShot属性为true之后,定时器只会触发一次超时信号。

3.定时器启动与停止

[slot] void QTimer::start() //启动定时器

[slot] void QTimer::start(int msec) //启动定时器,并设置超时时间

[slot] void QTimer::stop() //停止定时器

至此,第二章结束。

技术合作与咨询

发表评论

登录后才能评论