2012-03-21 79 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")); 
     } 
    } 
}