Qt修改window系统时间

Qt修改系统时间只能调用系统接口,window自然使用window自带的SetSystemTime函数。但在里面有一个问题,找了很久才知道原因,记录一下。

1.调用SetSystemTime 需要调用 #include

bool setDate(int year,int mon,int day,int hour,int minute,int second)
{
    SYSTEMTIME st;
    GetSystemTime(&st);    // Win32 API 获取系统当前时间,并存入结构体st中
    st.wYear=year;
    st.wMonth=mon;
    st.wDay=day;

    st.wHour=hour;//时=0  真实时间 8点     时=16  真实时间 第二天0点
    st.wMinute=minute;
    st.wSecond=second;
    st.wMilliseconds=0;


    return SetSystemTime(&st);    //Win32 API 设置系统时间
}

2.发现设置小时的问题,如上文 设置0点,系统为8点   设置16点,系统为第二天0点,中间时差8小时

/设置本地时间
SetLocalTime(
  const lpSystemTime: TSystemTime {TSystemTime 结构}
): BOOL;

//SetSystemTime 设置的是格林尼治时间
SetSystemTime(
  const lpSystemTime: TSystemTime {TSystemTime 结构}
): BOOL;

问题应该是时区上,使用SetSystemTime为格林尼治时间,所以就有二种解决办法,

1.把需要设置本地时间,转换为格林尼治时间

#include//需要导入头文件
void Widget::on_pushButton_2_clicked()
{
    QString text=ui->lineEdit->text();
    QDateTime time = QDateTime::fromString(text, "yyyy-MM-dd hh:mm:ss");

    time.setTimeSpec(Qt::LocalTime);
    qDebug()<<"1"<

打印结果是:

1 QDateTime("2021-02-03 12:10:06.000 中国标准时间 Qt::LocalTime")

2 QDateTime("2021-02-03 04:10:06.000 UTC Qt::UTC")

3 QDateTime("2021-02-03 12:10:06.000 中国标准时间 Qt::LocalTime")

2.使用设置本地时间接口

void Widget::on_pushButton_4_clicked()
{
    QString text=ui->lineEdit->text();
    QDateTime localTime2 = QDateTime::fromString(text, "yyyy-MM-dd hh:mm:ss");//2021-02-03 12:10:06 
    qDebug()<<"1"<

问题结束

你可能感兴趣的:(qt,开发语言,c++)