如何用Qt修改Linux设备系统时间?date命令报错求助
解决QProcess调用date命令设置时间时的"invalid date"错误
问题根源
你给QProcess传递参数时,错误地给日期字符串添加了双引号。QProcess的QStringList参数会自动处理命令行参数的分隔逻辑,不需要手动添加引号。这导致date命令实际收到的参数是--set="Mon Jan 23 09:30:17 UTC 2023",把带引号的整个字符串当作日期,自然无法识别。
另外,设置系统时间需要root权限,如果程序没有以root身份运行,即使参数正确也会执行失败,这是容易忽略的关键点。
修正方案
1. 修正参数传递方式
把--set和日期字符串作为独立参数,或者使用--set=日期的形式,去掉多余的引号:
QProcess task; QString command = "date"; QStringList args; // 两种正确写法二选一: // 写法一:拆分参数 args << "--set" << "Mon Jan 23 09:30:17 UTC 2023"; // 写法二:合并为单个参数 // 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);
2. 确保程序拥有root权限
在终端中用sudo启动你的程序,或者在代码中处理权限提升逻辑(比如调用pkexec等工具),否则date --set会因权限不足执行失败。
验证方法
可以先在终端手动执行以下命令确认日期格式有效:
sudo date --set="Mon Jan 23 09:30:17 UTC 2023"
终端中需要引号是因为空格会分割参数,但QProcess的参数列表已经帮你处理了空格,所以不需要额外加引号。
内容的提问来源于stack exchange,提问作者TerminusEst
相关产品推荐
相关产品推荐

