如何在Qt中获取所有时区列表?

时间:2012-03-21 12:15:43

标签: qt timezone qt4.7

有没有办法获得所有时区IST,ET等的列表。

我必须在我的申请中使用它们。

4 个答案:

答案 0 :(得分:5)

ICU Library是可移植的,可以在Qt应用程序中使用。 (它有一个C / C ++ API。)在其他许多功能中,有一个TimeZone类,可以枚举系统已知的时区。

如果您只需要一个简单的列表,那么可能会有点过分,但如果您希望使用这些时区并与其他元数据(区域设置等)进行交互,那么这将是一个很好的解决方案。

答案 1 :(得分:1)

答案 2 :(得分:1)

您是否需要在运行时或源代码中以某种方式找到它?如果是第二种情况,您可以使用this list

答案 3 :(得分:1)

在qt5.2中使用新的QTimeZone类的另一个例子是here

他们创建了一个自定义小部件,列出了所有已知的时区以及夏令时等特殊设置。

那里张贴的基本代码是:

#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"));
      }
  }
}