有人可以告诉我如何在 Qt 中设置时区吗?目前我正在使用 linux system() 调用来设置时区,但这并没有反映在 Qt 的 currentTime() API 中。Qt 5 及更高版本中有一个 setTimeZone() API,但我不知道如何使用它。提前致谢。
问问题
4051 次
2 回答
1
而不是使用 QProcess,我可能会建议使用 QDBus。
qdbus 命令行调用:
qdbus --system org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1.SetTimezone Europe/Berlin false
Qt代码:
QDBusInterface timedated("org.freedesktop.timedate1", "/org/freedesktop/timedate1", "org.freedesktop.timedate1", QDBusConnection::systemBus());
QDBusPendingReply<> setTz = timedated.callWithArgumentList(QDBus::Block, "SetTimeZone", {"Europe/Berlin", false});
于 2019-12-10T17:00:08.340 回答
1
正如弗兰克在评论中所说,Qt 中没有直接更改系统时区的 API。使用timedatectl
是一种方法。
但是,对于示例时区,可以像这样使用而不是system()
调用:QProcess
auto timezone = QString("Europe/Paris");
auto command = QString("timedatectl set-timezone ") + timezone;
auto ret = QProcess::execute(command);
if (ret != 0) {
qDebug("timedatectl failed : %d", ret);
}
如果已经有一个 QTimeZone 对象在使用,可以像这样组装命令:
auto timezoneObj = QTimeZone();
// process timezoneObj
if (!timezoneObj.isValid()) {
qDebug("invalid timezone qobject");
return;
}
auto timezone = timezoneObj.id();
auto command = QString("timedatectl set-timezone ") + timezone;
auto ret = QProcess::execute(command);
if (ret != 0) {
qDebug("timedatectl failed : %d", ret);
}
于 2019-09-24T06:46:56.327 回答