QDateTime 本地時間和UTC時間轉換問題

2021-09-07 17:56:31 字數 2633 閱讀 5880

先說一下utc,搜尋360百科: 協調世界時,又稱世界統一時間、世界標準時間、國際協調時間,簡稱utc,是以原子時秒長為基礎,在時刻上盡量接近於世界時的一種時間計量系統。2023年12月3日在內瓦舉行的世界無線電行政大會通過決議,確定用「世界協調時間」取代「格林威治時間」,作為無線電通訊領域內的國際標準時間。應用於天文學及天體,是測繪學上的一類用語。 

utc時間同本地時間關係

utc +時間差=本地時間

時間差根據時區定,東邊為正,西邊為負,如北京東八區,時間差0800,8小時。如果utc時間是 2014-04-03 00:00:00 那麼北京時間就是 2014-04-03 08:00:00。

好,utc時間介紹到此,繼續關於qdatetime與utc時間轉換:

1、將qdatetime 本地時間轉換成utc時間

qdatetime 提供toutc()函式,可將qdatetime 代表的時間轉換成utc時間,還以北京時間為例,如果當前時間1970-01-01 08:00:00, 則轉換成utc時間應該是 1970-01-01 00:00:00 ,測試**如下:

qdatetime  testtime = qdatetime::fromstring("1970-01-01 08:00:00","yyyy-mm-dd hh:mm:ss");

qdatetime utctime = testtime::toutc();

qstring sutctime = utctime.tostring("yyyy-mm-dd hh:mm:ss");

則sutctime 為yyyy-mm-dd hh:mm:ss

qdatetime 的 totime_t()函式,qt幫助大致意思是將當前時間轉換成距1970-1-1 0:0:0的秒數。時間座標是utc時間。

2、 qdatetime::totime_t()

qt 幫助告訴我們,totime_t 是將qdatetime 表示的轉換為距1970-01-01 00:00:00 的秒數,轉換時間座標是utc時間。

關鍵就是最後這句話:utc時間座標。這句話的意思就是,totime_t(),轉換的是qdatetime時間對應的utc時間距1970-01-01 00:00:00 的秒數。

我們知道,一般情況下,qdatetime,表示的是本地時間qt::localtime,特殊情況下會設定成qt::utc,表示時間直接表示的就是utc時間。對應於localtime,totime_t()轉換時,首先會將qdatetime的時間轉換成utc時間(toutc),然後計算秒數。對於qt::utc,則直接計算qdatetime距 1970-01-01 00:00:00 例:

qdatetime datetime = qdatetime::fromstring("1970-01-01 08:00:00","yyyy-mm-dd hh:mm:ss");

datetime.settimespec(qt::localtime);

uint secondslocal= datetime.totime_t();  //secondslocal =0;

datetime.settimespec(qt::utc);

uint secondsutc = datetime.totime_t();   //secondsutc = 28800;8小時

3、qdatetime::fromtime_t(uint seconds)[static]

檢視幫助,是將距1970-01-01 00:00:00 秒數轉換為qdatetime,時間座標還是utc。也就是說,seconds 表示的是utc時間距 1970-01-01 00:00:00 的秒數。

如果根據 totime_t() 反向理解,應該是fromtime_t 函式在執行時,首先根據秒數計算出utc時間,然後根據時間的qtimespec,判斷,如果是qt::localtime,則加時間差,計算出本地時間(如:北京時間加8小時),如果是qt::utc,則不變。

但由於fromtime_t()是靜態函式,返回qdatetime,預設直接轉換成qt::localtime,即以下操作,不管如何,返回時間值都不變 例:

qdatetime datetime = qdatetime::fromtime_t(0);

如果datetime為qt::localtime,則 datetime,表示的是1970-01-01 08:00:00

如果datetime 設為qt::utc, datetime.settimespec(qt:utc);  datetime代表的時間還是 1970-01-01 08:00:00

4、qdatetime::settime_t(uint seconds)

不同於 fromtime_t,可區分出localtime 和 utc。例:

qdatetime time ;

time.settime_t(0);

qstring strlocal =time.tostring("yyyy-mm-dd hh:mm:ss");//strlocal ="1970-01-01 08:00:00"

qdatetime timeutc;

timeutc.settimespec(qt::utc);

timeutc.settime_t(0);

qstring strutc = timeutc.tostring("yyyy-mm-dd hh:mm:ss"); //strutc = "1970-01-01 00:00:00"

**:

QDateTime 本地時間和UTC時間轉換問題

先說一下utc,搜尋360百科 協調世界時,又稱世界統一時間 世界標準時間 國際協調時間,簡稱utc,是以原子時秒長為基礎,在時刻上盡量接近於世界時的一種時間計量系統。1979年12月3日在內瓦舉行的世界無線電行政大會通過決議,確定用 世界協調時間 取代 格林威治時間 作為無線電通訊領域內的國際標準...

時間戳和QDateTime相互轉換

1.totime t 把2014年12月19日10 24 40這樣的qdatetime的格式轉變為1418955940這樣的時間戳 cpp view plain copy qdatetime time qdatetime currentdatetime 獲取當前時間 inttimet time.to...

Qt日期與時間QDateTime

qtime 時間資料型別,僅表示時間,如15 23 13。qdate 日期資料型別,僅表示日期,如2017 4 5。qdatetime 日期時間資料型別,表示日期和時間,如2017 03 23 08 12 43。從系統中讀取當前時間的糟函式如下 獲取當前日期時間,為三個專用編輯器設定日期時間資料,並...