Qt中的日期時間類

2021-08-18 20:10:28 字數 4545 閱讀 3062

在qt中,為了方便日期和時間的表示和相關操作,為我們提供了兩個類。乙個是qdate,表示年月日形式的日期;乙個是qtime,表示時分秒形式的時間。今天,就來學習一下這兩個類的使用方法。

qdate類已格里高里歷為準表示年月日的日期。該類可以從系統時鐘裡讀取當前日期,並且為我們提供了大量方便的日期操作,比如日期的加減。

通常我們可以使用特定的年月日數字來構造乙個該來的物件,讓給在進行其他計算。其建構函式宣告如下:

[cpp]view plain

copy

qdate()  

qdate(int

y, int

m, int

d)  

要注意的是,該建構函式可以接受兩位數字的年份。即0-99.

除了使用建構函式進行顯式構造外,我們在程式中還可以使用另外兩種方便的方式。乙個是使用靜態成員函式currentdate() ,該函式會使用系統時鐘裡的日期建立乙個qdate物件;另乙個是使用靜態函式fromstring() 函式,該函式會按照所傳入的表示日期的字串即相應的格式字串來建立出乙個qdate物件。這兩個函式宣告如下:

[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

其中,format與fromstring()類似。比如

[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()等等。在此,就不一一細說了,有需要的同學,可以參考幫助文件,也都非常的簡單。

類似於qdate表示了年月日的日期,qtime則表示了自凌晨以來的時分秒及毫秒的時間。該類從系統時鐘裡讀取當前時間並測量逝去時間的跨度。qtime使用24小時制來表示時間,並且不關心時區和夏令時。

其通常的構造方式也和qdate類似,可以使用相關建構函式直接傳入時分秒的數字進行直接構造,也可以使用靜態函式currenttime() 和 fromstring() 按一定格式進行構造。但是,qtime表示的時間的精度取決於作業系統本身的精度,並不是所有的系統都能提供1ms級別的精度。

我們還是先來看一下常用的建立qtime物件的方法:

[cpp]view plain

copy

qtime::qtime()  

qtime::qtime(int

h, int

m, int

s = 0, 

intms = 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

同樣,qtime也為我們提供了tostring() 方法:

[cpp]view plain

copy

qstring tostring(

const

qstring &format) 

const

其中,引數format與上面講的類似。比如:

[cpp]view plain

copy

qtime time(14,13,9,42)  

time.tostring("hh:mm:ss.zzz"

) 另外,qtime除了和qdate一樣,為我們提供了大量方便的建立、設定、獲取函式外,還為我們提供了三個用於簡單計時的方法。即:

[cpp]view plain

copy

intelapsed() 

const

intrestart()  

void

start()  

elapsed() 返回自從上次呼叫start() 或 restart() 之後的毫秒數。注意,如果自從上次呼叫start() 之後,超過了24小時,那麼該數字會回歸到0,從新計數。

start() 會將該物件設定為當前時間,然後開始計時。

restart() 將該物件設定為當前時間,然後返回自從上次呼叫start() 或 restart() 後所經歷的毫秒數。該方法可以原子性的完成這兩件事,所以非常適合重複計數。即先呼叫一下start() 開啟計時,之後每次計時就呼叫一下restart() 即可。但和elapsed() 類似,在上次呼叫start() 或 restart() 24小時後,該計時會回歸到0。

除此之外,qtime的其他方法和qdate都是類似的,比如對時間的加減,計算兩個時間的差,判斷時間物件是否有效的isnull()、isvalid()等等。

最後,其實在qt中除了qdate和qtime之外,還為我們提供了qdatetime類。顧名思義,該類是qdate和qtime功能的結合,可以使用乙個物件同時表示日期和時間。其使用方式也和上面講的兩個類大同小異,在此就不展開講解了,有需要的同學,可以自行學習qt幫助文件即可

qt日期時間

獲取系統當前時間並設定顯示格式 qdatetime current date time qdatetime currentdatetime qstring current date current date time.tostring yyyy mm dd hh mm ss ddd 例 2013 0...

Qt之日期時間

獲取系統當前時間並設定顯示格式 qdatetime current date time qdatetime currentdatetime qstring current date current date time.tostring yyyy mm dd hh mm ss ddd 例 2013 0...

日期時間類

定義乙個日期類date,資料成員包括年 月 日,setdate int y,int m,int d 和printdate 函式分別用於設定日期和顯示日期 再定義乙個時間類time,資料成員包括時 分 秒,settime int h,int m,int s 和printtime 函式分別用於設定時間和...