You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:41:32