2012-03-21 1 views

ответ

1

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

+0

Мне нужен он для моего исходного кода, но если пользователь выбирает часовой пояс, мое приложение должно показывать время в этом стандарте. Как мне это сделать ? – abhishek

+0

Чтобы достичь этого, возможно, любое решение возможно. Жесткое кодирование часовых поясов в исходном коде может быть более простым, но получение их из системы имеет то преимущество, что не нуждается в обслуживании, предполагая, что в редком случае, когда часы будут изменены, они будут отражены во внешнем ресурсе, который вы используете. Это может показаться излишним, хотя, видя, как это должно быть чрезвычайно редкое событие. – teukkam

1
+0

Примечание это не является родным решением Qt, так что это не является переносимым для всех платформ. – teukkam

+0

Moi, я знаю это :), но должен дать «abhishek» правильный способ приблизиться – Programmer

5

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

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

+0

Я не знаю, откуда можно получить библиотеки из данной ссылки. Есть ли способ напрямую добавить эти библиотеки в мой проект с символикой? – abhishek

+0

Страница загрузки: http://site.icu-project.org/download. Эта страница содержит ссылки на двоичные и исходные загрузки, а также адрес репозитория Subversion. У меня нет опыта работы с средой Symbian, поэтому я боюсь, что я не могу предложить никаких подробностей; библиотека ICU - обычная библиотека C/C++ - включает заголовки, добавляет путь к библиотекам в ваш компоновщик. Возможно, вам понадобится создать новый вопрос для справки по Symbian. –

1

Существует еще один пример использования нового класса QTimeZone в qt5.2, описанном 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")); 
     } 
    } 
}