Home > OS >  How to change system time of a linux device with Qt?
How to change system time of a linux device with Qt?

Time:01-25

Im currently designing an user interface which requires to display the current date and time and also let the user edit the current time and date later in the settings.

I have been reading a lot about this issue today but i couldnt find a solution that worked for me. I tried to solve the issue with the QProcess by creating an QProcess object and executing the commands on the linux device my user interface is for. I just seem to struggle with the "date" command when i try to set the time.

This is my current code to change the system time of my linux device with the "date" command.

My issue is that if i run my programm with the "args << ...." line commented it shows me the StdOut of the current system time. BUT if i run the code with the args and try to set time i always get the same error message StdError "date: invalid date '"Mon Jan 23 09:30:17 UTC 2023"' for every possible format. i have tried many different formats and variations how you can set the time but i always get the same error message.

    QProcess task;
    QString command;
    QStringList args;

    command = "date";
    // I tried many different time formats but all of seem to be invalid

    args << "--set=\"Mon Jan 23 09:30:17 UTC 2023\"";
    task.start(command, args);
    task.waitForFinished();

    QString StdOut = task.readAllStandardOutput();
    QString StdError = task.readAllStandardError();

    ui->lineEdit_13->setText(StdOut);
    ui->lineEdit_14->setText(StdError);

Does anyone know what might be my problem and how to fix it? I surely cant be that hard to change the time of a device.

Thanks in advance for the answers :)

CodePudding user response:

Could you try:

args << QStringLiteral("-s")
     << QStringLiteral("Mon Jan 23 09:30:17 UTC 2023");

It is maybe an issue with the quotes.

Also, please note that you need to run your app with enough access privileges to modify the system date.

CodePudding user response:

Sooo i found a very very easy method to change the system time of my display im using for my application. I read many times that changing system time wasnt possible with pure Qt but that is a very big lie.

You dont need QProcess at all. Just watch out that this applies for linux devices only

I used the dateTimeWidget. I just put it next my visible area of my application so i can access its functions.

So to change system time in Qt i used following line of code

ui->dateTimeWidget->setCTime(jahr_val,monat_val, tag_val, stunde_val, minute_val, sekunde_val, true);

Last argument needs to be true to sync the time you just set with the system clock. Easy as that.

  • Related