QT 更改本地時間

QT有提供QDateTime類,該類能夠很方便的獲取本地的系統時間,但是並沒有提供設置本地系統時間的方法。

  • windows系統下:

​ 設置本地系統時間有兩種方法,一種是調用系統的接口設置,另一種是通過系統命令行設置。

	QDateTime datetime;

​     //設定要修改的系統時間,爲了方便,直接調用了Qt的接口獲取了本地系統時間
​    datetime = QDateTime::currentDateTime();
​    //下面使用系統的時間設置接口進行系統時間的修改
​    SYSTEMTIME st;
​    GetSystemTime(&st); // Win32 API 獲取系統當前時間,並存入結構體st中
​    st.wYear = datetime.date().year();
​    st.wMonth = datetime.date().month();
​    st.wDay = datetime.date().day();
​    st.wHour = datetime.time().hour();
​    st.wMinute = datetime.time().minute();
​    st.wSecond = datetime.time().second();
​    st.wMilliseconds = datetime.time().msec();
​    SeSystemTime(&st);    //Win32 API 設置系統時間

​ 使用以上的方法設置完系統時間之後,會發現,設置的系統時間與本地時間相差8小時,這是因爲時區不同導致的原因。修改如下:

​ 將 GetSystemTime(&st); 修改爲:GetLocalTime(&st); // Win32 API 獲取系統當前時間,並存入結構體st中

​ 將 SeSystemTime(&st); 修改爲:SeLocalTime(&st); //Win32 API 設置系統時間

​ 就可以避免因爲時區不同而導致的時間相差8小時的問題。

​ 第二種方法,使用系統命令行修改本地時間,在windows系統下,修改時間只能用 date -s yyyy/MM/dd 和 time -s hh:mm:ss

​ 因此導致修改系統時間會使用兩次調用命令行操作。

  • ​ Linux系統下:
	QString date = "date -s \"2007-08-03 14:15:00\"" 
​    QProcess::startDetached(date);
​    QProcess::startDetached("hwclock -w"); // 同步系統時間
​    QProcess::startDetached("sync"); // 保存配置

​ 在Linux系統下,時鐘分爲系統時鐘和硬件時鐘兩種。硬件時鐘是依靠BIOS電池來維持技術,而我們平時開發的時候基本上用到的是系統時鐘,如一些函數,一些類,都是使用系統時鐘的。

​ 系統重啓時,硬件時鐘就會自動同步到系統時鐘(硬件時鐘寫入到系統時鐘),因此才保證了我們的系統時鐘的連續性。

​ 假設我們在設置系統時鐘之後沒有將系統時鐘同步到硬件時鐘,系統在關機一段時間重啓後,系統時鐘和硬件時間會不一樣。

​ 因此在系統時鐘設置完之後,會有:"hwclock -w" 來同步硬件時鐘。

​ 最後保存配置,就完成了系統時間的設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章