Как установить часовой пояс в Qt?

Может кто-нибудь показать мне, как установить часовой пояс в Qt? В настоящее время я использую системный вызов linux для установки часового пояса, но это не отражается в API currentTime() Qt. В Qt 5 и выше есть API setTimeZone(), но я не знаю, как его использовать. Заранее спасибо.

0 ответов

Как заявил Фрэнк в комментариях, в 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);
}

Вместо использования 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});
Другие вопросы по тегам