如何在Qt中设置时区?

如何在Qt中设置时区?,qt,timezone,qdatetime,qtime,Qt,Timezone,Qdatetime,Qtime,有人能告诉我如何在Qt中设置时区吗?目前我正在使用linux system()调用来设置时区,但这并没有反映在Qt的currentTime()API中。Qt5及以上版本中有一个setTimeZone()API,但我不知道如何使用它。提前谢谢 正如Frank在评论中所说,Qt中没有API可以直接更改系统时区。使用timedatectl是一种方法 但是,对于示例时区,QProcess可以这样使用,而不是system()调用: auto timezone = QString("Europe/Paris

有人能告诉我如何在Qt中设置时区吗?目前我正在使用linux system()调用来设置时区,但这并没有反映在Qt的currentTime()API中。Qt5及以上版本中有一个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);
}

我可能建议使用QDBus代替QProcess

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});
QDBusInterface timedated(“org.freedesktop.timedate1”,“org/freedesktop/timedate1”,“org.freedesktop.timedate1”,QDBusConnection::systemBus());
QDBusPendingReply setTz=timedated.callWithArgumentList(QDBus::Block,“SetTimeZone”,{“Europe/Berlin”,false});

我不明白你想要实现什么。您想在系统时区中显示时间,还是想实际更改系统的时区?更改系统本身的时区。Qt中没有用于此的API。这是系统配置,通常普通应用程序不关心(或不应该关心)什么?它做什么?它为特定的QDateTime对象设置时区,表示日期和时间。它与系统时区无关。