0、說明
提供時間日期的表達和相關函數。
QDateTime通過日期+時間來構造一個日期時間。它綜合了QDate和QTime的所有特性。
它可以通過系統時鍾來獲取當前DateTime。它還提供了比較時間的方法和對時間進行加減運算的方法。
QDateTime可以分別通過本地時間、UTC、UTC偏移時間、指定時區(通過QTimeZone類實現)來描述日期時間。這些時間間是相關的,例如,UTC偏移 +3600×8 秒 等同於 ISO標准標識 UTC+08:00,等同於 時區為CN/Beijing 的時間。
1)構造
一個QDateTime既可以直接通過傳入一個date和time進行構造,也可以調用如currentDateTime()、fromMSecsSinceEpoch()的靜態函數來進行構造。date和time可以通過setDate()、setTime()來進行設置,也可以直接通過setMSecsSinceEpoch()來用時間戳進行構造,也可以用fromString()來從一個String用相關的格式進行構造。
2)當前時間
QDateTime::currentDateTime()返回當前DateTime,QDateTime::currentDateTimeUtc()返回UTC下的當前時間。
3)提取與設置
可以通過date()、time()來提取該DateTime中的Date與Time。同樣的信息可以通過在toString()中傳入指定格式來實現。
4)運算
addMSecs():加上毫秒
addSecs():秒
addDays():日
addMonths():月
addYears():年
daysTo():兩個DateTime間的天數
msecTo():兩個DateTime間的毫秒數
5)轉換
toTimeSpec():轉換為本地時間
toOffsetFromUtc():轉換為UTC偏移時間
toTimeZone():轉換為時區時間
timeSpec():存儲時間的相對時間規范
Qt::TimeZone + timeZone():返回時區
注意事項
①沒有0年
只有-1與1年
1、模塊和加載項
Header: | #include <QDateTime> |
qmake: | QT += core |
2、構造
QDateTime(QDateTime other) | 構造另一個QDateTime的副本 |
QDateTime(QDate date, QTime time, QTimeZone timeZone) | 用指定的Date、Time、TimeZone構造DateTime |
QDateTime(QDate date, QTime time, Qt::TimeSpec spec, int offsetSeconds) | |
QDateTime(QDate date, QTime time, Qt::TimeSpec spec = Qt::LocalTime) | |
QDateTime(QDate date) | 用指定QDate構造QDateTime |
QDateTime() |
3、靜態字段
enum class | YearRange { First, Last } | 年的范圍 |
Constant | Value | Description |
---|---|---|
QDateTime::YearRange::First |
-292275056 |
The later parts of this year are representable |
QDateTime::YearRange::Last |
+292278994 |
The earlier parts of this year are representable |
5、靜態方法
返回值類型 |
方法 |
說明 |
QDateTime | currentDateTime() | 當前本地時間 |
currentDateTimeUtc() | 當前UTC時間 | |
qint64 | currentMSecsSinceEpoch() | 當前時間戳(毫秒) |
currentSecsSinceEpoch() | 當前時間戳(秒) | |
QDateTime | fromCFDate(CFDateRef date) | 從一個CFDate構造QDateTime |
fromMSecsSinceEpoch(qint64 msecs) fromMSecsSinceEpoch(qint64 msecs, Qt::TimeSpec spec, int offsetSeconds = 0) fromMSecsSinceEpoch(qint64 msecs, QTimeZone timeZone) |
返回時間戳(毫秒)對應的QDateTime | |
fromNSDate(const NSDate *date) | 從NSDate構造QDateTime | |
fromSecsSinceEpoch(qint64 secs, Qt::TimeSpec spec = Qt::LocalTime, int offsetSeconds = 0) fromSecsSinceEpoch(qint64 secs, QTimeZone timeZone) |
返回時間戳(秒)對應的QDateTime | |
fromString(QString string, Qt::DateFormat format = Qt::TextDate) fromString(QString string, QString format) fromString(QString string, QString format, QCalendar cal) |
從QString用指定格式構造QDateTime |
6、實例方法
返回值類型 |
方法 |
說明 |
||||||||||||
QDateTime & bool bool bool bool bool bool |
operator=(QDateTime other) operator!=(QDateTime other) operator<(QDateTime other) operator<=(QDateTime other) operator==(QDateTime other) operator>(QDateTime other) operator>=(QDateTime other) |
賦值
比較兩個日期的大小
|
||||||||||||
QDateTime | addDays(qint64 ndays) addMSecs(qint64 msecs) addMonths(int nmonths) addSecs(qint64 s) addYears(int nyears) |
QDateTime加一定時間,得到新QDateTime。 如果參數是負數就表示減一定時間。 |
||||||||||||
QDate QTime Qt::TimeSpec QTimeZone QString |
date() time() timeSpec() timeZone() |
提取QDateTime的相關信息 | ||||||||||||
qint64 |
daysTo(QDateTime other) msecsTo(QDateTime other) secsTo(QDateTime other) |
兩個QDateTime間的間隔,單位分別是天、毫秒、秒 | ||||||||||||
bool | isDaylightTime() | 是否是夏令時 | ||||||||||||
bool | isNull() | 當Date和Time都是null時返回true | ||||||||||||
bool | isValid() | |||||||||||||
int | offsetFromUtc() | UTC偏移,單位秒 | ||||||||||||
void | setDate(QDate date) setMSecsSinceEpoch(qint64 msecs) setOffsetFromUtc(int offsetSeconds) setSecsSinceEpoch(qint64 secs) setTime(QTime time) setTimeSpec(Qt::TimeSpec spec) setTimeZone(QTimeZone toZone) |
設置QDateTime的相關信息 | ||||||||||||
void | swap(QDateTime &other) | 互換兩個QDateTime的相關信息 | ||||||||||||
CFDateRef QDateTime qint64 NSDate * QDateTime qint64 QDateTime QDateTime QDateTime
|
toCFDate() toNSDate() toOffsetFromUtc(int offsetSeconds) toTimeSpec(Qt::TimeSpec spec) toTimeZone(QTimeZone timeZone) toUTC() |
把QDateTime轉換為對應的時間 | ||||||||||||
QString | toString(QString format) toString(Qt::DateFormat format = Qt::TextDate) toString(QString format, QCalendar cal) |
返回該DateTime對應的QString,參數format指定了轉化的格式。 假設QDateTime是 21 May 2001 14:13:09.120 相關轉化格式為:
如果DateTime非法,會返回一個空QString。 正如dd與ddd,打印時分別是21和Tue,不同個數的格式字符打印出的內容也不同,有興趣可以自行嘗試。 格式用到的標准是ISO 8601。 |
7、一些用法
1)獲取當前日期
QDateTime dt = QDateTime::currentDateTime();
2)轉換為String
dts = dt.toString("yyyy-MM-dd HH:mm:ss ddd"); //"2021-07-16 10:13:00 周五"