如何在Qt中设置时区?
有人能告诉我如何在Qt中设置时区吗?目前我正在使用linux system()调用来设置时区,但这并没有反映在Qt的currentTime()API中。Qt5及以上版本中有一个setTimeZone()API,但我不知道如何使用它。提前谢谢 正如Frank在评论中所说,Qt中没有API可以直接更改系统时区。使用如何在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
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对象设置时区,表示日期和时间。它与系统时区无关。