2012-03-21 399 views

回答

1

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

+0

我需要它为我的源代码,但如果用户选择时区,我的应用程序应该在该标准中显示时间。我怎样才能做到这一点 ? – abhishek 2012-03-22 12:38:46

+0

要实现这一点,可能要么解决方案是可能的。在源代码中对时区进行硬编码可能是一种更简单的方法,但从系统中获取它们具有不需要维护的优点,假设极少数情况下时区发生变化,它们将反映在您正在使用的外部资源中。不过,看起来这应该是一件极其罕见的事情。 – teukkam 2012-03-22 12:46:55

5

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

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

+0

我不知道从哪里得到给定链接的库,有什么方法可以直接将这些库添加到我的symbain项目中? – abhishek 2012-03-28 08:24:03

+0

下载页面是:http://site.icu-project.org/download。该页面包含二进制和源代码下载链接以及Subversion存储库的地址。我对Symbian环境没有经验,所以我恐怕不能提供任何细节; ICU库是一个正常的C/C++库 - 包含头文件,将链接库的路径添加到库中。您可能想为Symbian特定的帮助创建一个新问题。 – 2012-03-28 12:30:31

1

在qt5.2中描述的here中有另一个使用新QTimeZone类的例子。

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

基本代码贴有:

#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")); 
     } 
    } 
} 
相关问题