有人可以告诉我如何在Qt中设置时区吗?目前我正在使用 linux system() 调用来设置时区,但这并没有反映在 Qt 的 currentTime() API 中。Qt 5及更高版本中有一个setTimeZone() API,但我不知道如何使用它。提前谢谢。
正如Frank在评论中所说,Qt中没有直接更改系统时区的API。使用timedatectl
是一种方法。
示例时区,可以像这样使用QProcess
而不是system()
调用:
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);
}
与其使用 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});