3

有什么方法可以获取所有时区 IST、ET 等的列表。

我必须在我的应用程序中使用它们。

4

4 回答 4

5

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

如果您只需要一个简单的列表,这可能有点过头了,但如果您希望使用这些时区并与其他元数据(语言环境等)进行交互,这将是一个很好的解决方案。

于 2012-03-21T12:33:48.033 回答
3

在此处描述的 qt5.2 中还有另一个使用新 QTimeZone 类的示例。

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

那里发布的基本代码是:

#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"));
      }
  }
}
于 2015-09-27T13:43:31.673 回答
1

是的,试试这个例子

http://www.developer.nokia.com/Community/Wiki/How_to_get_list_of_Time_Zones_in_Qt_Maemo_application

于 2012-03-21T12:23:08.437 回答
1

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

于 2012-03-21T12:23:24.010 回答