Как получить весь список часовых поясов в Qt? - PullRequest
1 голос
/ 21 марта 2012

Есть ли способ получить списки всех часовых поясов IST, ET и т. Д.

Я должен использовать их в своем приложении.

Ответы [ 4 ]

5 голосов
/ 21 марта 2012

Библиотека ICU является переносимой и может использоваться в приложении Qt. (Он имеет C / C ++ API.) Среди множества других его функций есть класс TimeZone, который может перечислять часовые пояса, известные системе.

Это может быть излишним, если все, что вам нужно, это простой список, но если вы планируете использовать эти часовые пояса и взаимодействовать с другими метаданными (локали и т. Д.), Это было бы хорошим решением.

1 голос
/ 27 сентября 2015

Есть еще один пример, использующий новый класс QTimeZone в qt5.2, описанный здесь .

Они создают собственный виджет, в котором перечислены все известные часовые пояса, а также их специальные настройки, такие как летнее время и т. Д.

Основной код, размещенный там:

#include <QDebug>
#include <QByteArray>
#include <QDateTime>
#include <QList>
#include <QTimeZone>

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    // Fill in combo box.
    QList<QByteArray> ids = QTimeZone::availableTimeZoneIds();
    foreach (QByteArray id, ids) {
        ui->timeZoneComboBox->addItem(id);
    }

    // Connect combo box to slot to update fields.
    connect(ui->timeZoneComboBox, SIGNAL(currentIndexChanged(int)),
            SLOT(UpdateFields()));

    // Update fields for initial value.
    UpdateFields();
}

void Widget::UpdateFields() {

  QByteArray id = ui->timeZoneComboBox->currentText().toLatin1();
  QTimeZone zone = QTimeZone(id);

  // Fill in fields for current time zone.
  if (zone.isValid()) {
      ui->descriptionLabel->setText(tr("<b>Description:</b> ") + id);
      ui->countryLabel->setText(tr("<b>Country:</b> ") +    
          QLocale::countryToString(zone.country()));
      ui->hasDaylightTimeCheckBox->setChecked(zone.hasDaylightTime());
      ui->isDaylightTimeCheckBox->setChecked(
          zone.isDaylightTime(QDateTime::currentDateTime()));
      ui->hasTransitionsCheckBox->setChecked(zone.hasTransitions());
      QDateTime zoneTime = QDateTime(
          QDate::currentDate(), QTime::currentTime(), zone).toLocalTime();
      ui->dateEdit->setDate(zoneTime.date());
      ui->timeEdit->setTime(zoneTime.time());

      QTimeZone::OffsetData offset = zone.nextTransition(
          QDateTime::currentDateTime());
      if (offset.atUtc != QDateTime()) {
          ui->nextTransitionLabel->setEnabled(true);
          ui->nextTransitionLabel->setText(
          tr("<b>Next transition:</b> %1").arg(offset.atUtc.toString()));
      } else {
          ui->nextTransitionLabel->setEnabled(false);
          ui->nextTransitionLabel->setText(
              tr("<b>Next transition:</b> none"));
      }
  }
}
1 голос
/ 21 марта 2012

Вам нужно как-то найти его во время выполнения или для вашего исходного кода?Если во втором случае вы можете использовать этот список .

1 голос
/ 21 марта 2012
...