Qt常用类 - QDateTime
1 开发环境
在介绍内容之前,先说明一下开发环境,如下图:
Qt版本:Qt5.3.2;
Qt开发工具:Qt Creater 3.2.1;
Qt构建工具:Desktop Qt 5.3 MinGW 32bit;
Qt开发平台:Windows 7 64bit。
2 QDateTime
QDateTime是Qt中用到的日期时间类,可以用于对自然日期时间的记录和计算。首先,将QDateTime中的常用接口整理出来,分为初始化、获取、计算、比较、转换共5类,这样方便学习和理解。
//初始化
QDateTime();
QDateTime(const QDate &date);
QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime);
QDateTime(const QDateTime &other);
void setDate(const QDate &date);
void setTime(const QTime &time);
QDateTime & operator=(const QDateTime &other);
QDateTime QDateTime::currentDateTime();
QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
QDateTime QDateTime::fromString(const QString &string, const QString &format);
bool isNull() const;
bool isValid() const;
bool isDaylightTime() const;
Qt::TimeSpec timeSpec() const;
//获取
QDate date() const;
QTime time() const;
//计算
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;
qint64 daysTo(const QDateTime &other) const;
qint64 secsTo(const QDateTime &other) const;
qint64 msecsTo(const QDateTime &other) const;
//比较
bool operator==(const QDateTime &other) const;
bool operator!=(const QDateTime &other) const;
bool operator< (const QDateTime &other) const;
bool operator<=(const QDateTime &other) const;
bool operator> (const QDateTime &other) const;
bool operator>=(const QDateTime &other) const;
//转换
QDateTime toTimeSpec(Qt::TimeSpec spec) const;
QDateTime toUTC() const;
QDateTime toLocalTime() const;
下面,是上述接口的使用例程。
#include <QDate>
#define qPrintableU8(_string) (QString(_string).toUtf8().constData())
#define DATE_STRING_FORMAT ("yyyy-MM-dd")
#define TIME_STRING_FORMAT ("hh:mm:ss.zzz")
#define DATETIME_STRING_FORMAT ("yyyy-MM-dd hh:mm:ss.zzz")
//QDateTime();
//QDateTime(const QDate &date);
//QDateTime(const QDate &date, const QTime &time, Qt::TimeSpec spec = Qt::LocalTime);
//QDateTime(const QDateTime &other);
//void setDate(const QDate &date);
//void setTime(const QTime &time);
//QDateTime & operator=(const QDateTime &other);
//QDateTime QDateTime::currentDateTime();
//QDateTime QDateTime::fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
//QDateTime QDateTime::fromString(const QString &string, const QString &format);
//bool isNull() const;
//bool isValid() const;
//bool isDaylightTime() const;
//Qt::TimeSpec timeSpec() const;
QDateTime dtNull;
qDebug("dtNull: %04d-%02d-%02d %02d:%02d:%02d.%03d.",
dtNull.date().year(), dtNull.date().month(), dtNull.date().day(),
dtNull.time().hour(), dtNull.time().minute(), dtNull.time().second(), dtNull.time().msec());
qDebug("dtNull is null? %s.", dtNull.isNull() ? "yes" : "no");
qDebug("dtNull is valid? %s.", dtNull.isValid() ? "yes" : "no");
QDateTime dtSys = QDateTime::currentDateTime();
qDebug("dtSys is DST? %s.", dtSys.isDaylightTime() ? "yes" : "no");
qDebug("dtSys's timespec is %d.", dtSys.timeSpec());
qDebug("dtSys: %s.", qPrintableU8(dtSys.toString(DATETIME_STRING_FORMAT)));
QDateTime dtCpy(dtSys);
qDebug("dtCpy: %s.", qPrintableU8(dtCpy.toString(DATETIME_STRING_FORMAT)));
QDateTime dtCns(QDate(2001, 1, 1), QTime(10, 11, 12, 13));
qDebug("dtCns: %s.", qPrintableU8(dtCns.toString(DATETIME_STRING_FORMAT)));
QDateTime dtCnsDate(QDate(2002, 2, 2));
qDebug("dtCnsDate: %s.", qPrintableU8(dtCnsDate.toString(DATETIME_STRING_FORMAT)));
dtCnsDate.setDate(dtSys.date());
dtCnsDate.setTime(dtSys.time());
qDebug("dtCnsDate(set): %s.", qPrintableU8(dtCnsDate.toString(DATETIME_STRING_FORMAT)));
QDateTime dtOe = dtSys;
qDebug("dtOe: %s.", qPrintableU8(dtOe.toString(DATETIME_STRING_FORMAT)));
QDateTime dtFs = QDateTime::fromString("2019-01-01 23:59:59.555", DATETIME_STRING_FORMAT);
qDebug("dtFs: %s.", qPrintableU8(dtFs.toString(DATETIME_STRING_FORMAT)));
//QDate date() const;
//QTime time() const;
QDateTime dtGet = QDateTime::currentDateTime();
qDebug("dtGet: %04d-%02d-%02d %02d:%02d:%02d.%03d.",
dtGet.date().year(), dtGet.date().month(), dtGet.date().day(),
dtGet.time().hour(), dtGet.time().minute(), dtGet.time().second(),
dtGet.time().msec());
//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;
//qint64 daysTo(const QDateTime &other) const;
//qint64 secsTo(const QDateTime &other) const;
//qint64 msecsTo(const QDateTime &other) const;
QDateTime dtAYears = dtSys.addYears(1);
qDebug("dtAYears: %s.", qPrintableU8(dtAYears.toString(DATETIME_STRING_FORMAT)));
qDebug("dtAYears days to dtSys is %lld days.", dtAYears.daysTo(dtSys));
QDateTime dtAMonths = dtSys.addMonths(-1);
qDebug("dtAMonths: %s.", qPrintableU8(dtAMonths.toString(DATETIME_STRING_FORMAT)));
QDateTime dtADays = dtSys.addDays(-180);
qDebug("dtADays: %s.", qPrintableU8(dtADays.toString(DATETIME_STRING_FORMAT)));
QDateTime dtASecs = dtSys.addSecs(-3600);
qDebug("dtASecs: %s.", qPrintableU8(dtASecs.toString(DATETIME_STRING_FORMAT)));
qDebug("dtASecs secsto dtSys is %lld secs.", dtASecs.secsTo(dtSys));
QDateTime dtAMsecs = dtSys.addMSecs(-3600 * 1000);
qDebug("dtAMsecs: %s.", qPrintableU8(dtAMsecs.toString(DATETIME_STRING_FORMAT)));
qDebug("dtAMsecs msecsto dtSys is %lld msecs.", dtAMsecs.msecsTo(dtSys));
//bool operator==(const QDateTime &other) const;
//bool operator!=(const QDateTime &other) const;
//bool operator< (const QDateTime &other) const;
//bool operator<=(const QDateTime &other) const;
//bool operator> (const QDateTime &other) const;
//bool operator>=(const QDateTime &other) const;
QDateTime dtEarlier(QDate(2000, 1, 1), QTime(0, 0, 0, 0));
QDateTime dtLater(QDate(2001, 2, 2), QTime(1, 1, 1, 1));
qDebug("dtEarlier != dtLater? %s.", dtEarlier != dtLater ? "yes" : "no");
qDebug("dtEarlier == dtLater? %s.", dtEarlier == dtLater ? "yes" : "no");
qDebug("dtEarlier < dtLater? %s.", dtEarlier < dtLater ? "yes" : "no");
qDebug("dtEarlier <= dtLater? %s.", dtEarlier <= dtLater ? "yes" : "no");
qDebug("dtEarlier > dtLater? %s.", dtEarlier > dtLater ? "yes" : "no");
qDebug("dtEarlier >= dtLater? %s.", dtEarlier >= dtLater ? "yes" : "no");
//QDateTime toTimeSpec(Qt::TimeSpec spec) const;
//QDateTime toUTC() const;
//QDateTime toLocalTime() const;
QDateTime dtTpLocal = dtSys.toTimeSpec(Qt::LocalTime);
qDebug("dtTpLocal: %s.", qPrintableU8(dtTpLocal.toString(DATETIME_STRING_FORMAT)));
QDateTime dtTpUTC = dtSys.toTimeSpec(Qt::UTC);
qDebug("dtTpUTC: %s.", qPrintableU8(dtTpUTC.toString(DATETIME_STRING_FORMAT)));
QDateTime dtTpOffsetFromUTC = dtSys.toTimeSpec(Qt::OffsetFromUTC);
qDebug("dtTpOffsetFromUTC: %s.", qPrintableU8(dtTpOffsetFromUTC.toString(DATETIME_STRING_FORMAT)));
QDateTime dtTpTimeZone = dtSys.toTimeSpec(Qt::TimeZone);
qDebug("dtTpTimeZone: %s.", qPrintableU8(dtTpTimeZone.toString(DATETIME_STRING_FORMAT)));
QDateTime dtToUTC = dtSys.toUTC();
qDebug("dtToUTC: %s.", qPrintableU8(dtToUTC.toString(DATETIME_STRING_FORMAT)));
QDateTime dtToLocal = dtToUTC.toLocalTime();
qDebug("dtToLocal: %s.", qPrintableU8(dtToLocal.toString(DATETIME_STRING_FORMAT)));
在学习过程中,可以将上述代码放到一个按钮的响应函数中,以调试方式运行,就可以在Qt Creater中的应用程序输出窗口看到输出结果了。