Bootstrap

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" 来同步硬件时钟。

​ 最后保存配置,就完成了系统时间的设置。

;