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"
来同步硬件时钟。
最后保存配置,就完成了系统时间的设置。