如何在Qt中设置时区



有人可以告诉我如何在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});

相关内容

  • 没有找到相关文章

最新更新