先說一下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。從系統中讀取當前時間的糟函式如下 獲取當前日期時間,為三個專用編輯器設定日期時間資料,並...