先說一下UTC,搜索360百科: 協調世界時,又稱世界統一時間、世界標准時間、國際協調時間,簡稱UTC,是以原子時秒長為基礎,在時刻上盡量接近於世界時的一種時間計量系統。1979年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"
轉自:https://blog.csdn.net/clp_csdnid/article/details/79050639