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"
來同步硬件時鐘。
最後保存配置,就完成了系統時間的設置。