Russian Qt Forum
Май 06, 2024, 02:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Возможно ли средствами Qt получить список часовых поясов?  (Прочитано 7844 раз)
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« : Ноябрь 18, 2015, 15:35 »

Здравствуйте, господа форумчане. Задался тут одним вопросом: "Как средствами Qt получить список часовых поясов, чтобы указывалось в нем и зимнее и летнее время?"
Начал разбираться с классом QTimeZone, пока не совсем разобрался. Но как я понимаю там хранятся все возможные временные зоны. Как с него получить список часовых
поясов подобный тому что в настройках часового пояса Windows или Linux, пока не понял. Вот что-то подобное вышло:
Код:
	QTimeZone time_zone;

QList<QByteArray> stl_llist = time_zone.availableTimeZoneIds();

int i=0;
foreach (QByteArray child_stl_llist, stl_llist)
{
  i++;
  QTimeZone zone(child_stl_llist);
  QDateTime date;
  date.setTimeZone(zone);
  qDebug() << "№: " << i << "Time Zone: " << child_stl_llist << "Abrivation: " << zone.displayName(QTimeZone::GenericTime, QTimeZone::DefaultName);
}
Но их тут слишком много. Может просто можно перебрать их и если для зоны одна и та же абривиатура, выводить ее один раз.
А как быть с летним и зимним временем? Где хранятся эти записи?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Ноябрь 19, 2015, 09:48 »

Код
C++ (Qt)
QList<QByteArray> QTimeZone::availableTimeZoneIds()
?
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #2 : Ноябрь 19, 2015, 12:53 »

Код
C++ (Qt)
QList<QByteArray> QTimeZone::availableTimeZoneIds()
?
Я так понял, там хранится список всех временных зон, которых там аж 443. Как с этого получить хотя-бы стандартный список часовых поясов подобный тому что в Windows,
не могу понять.
Походу ручками все самому делать нужно. Ну к примеру этот код:
Код:
	QList<QByteArray> stl_llist = time_zone.availableTimeZoneIds();
int i = 0;
QStringList stringList;
foreach (QByteArray child_stl_llist, stl_llist)
{
 QTimeZone zone(child_stl_llist);

 QString temp(zone.displayName(QTimeZone::GenericTime, QTimeZone::LongName));

 stringList += temp;

 qDebug() << "№: " << i+1 << "  " << stringList[i];

 i++;
}
выводит следующий список, что в файле ниже. В нем много повторений часовых поясов.

Если побиться над этим, можно из этого путем сохранения данных записей в QStringList, удаления из него повторений,
получить подобный список часовых поясов, что в Windows. Но как быть с летним/зимним временем, пока не знаю.
« Последнее редактирование: Ноябрь 19, 2015, 13:00 от billy4685 » Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #3 : Ноябрь 19, 2015, 13:01 »

У кого есть замечания, и советы как правильно реализовывать интерфейс для выбора часовых поясов, милости прошу. Думаю не только мне это будет интересно))
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Ноябрь 19, 2015, 13:13 »

Я так понял, там хранится список всех временных зон, которых там аж 443. Как с этого получить хотя-бы стандартный список часовых поясов подобный тому что в Windows,
не могу понять.
Ну там список похож на тот, что в /usr/share/zoneinfo
Код
C++ (Qt)
QList<QByteArray> QTimeZone::availableTimeZoneIds()
?
Но как быть с летним/зимним временем, пока не знаю.
Код
C++ (Qt)
bool QTimeZone::hasTransitions() const
?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Ноябрь 19, 2015, 13:16 »

А строки складывать вы можете в QMap, например, чтобы отсеять дубли
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #6 : Ноябрь 19, 2015, 15:35 »

У кого есть замечания, и советы как правильно реализовывать интерфейс для выбора часовых поясов, милости прошу. Думаю не только мне это будет интересно))

Хороший диалог выбора в opensuse https://www.suse.com/documentation/sles11/book_sle_deployment/data/sec_y2_country.html
Т.е. сначала регион, затем пояс в регионе, отдельно Россия со своими поясами.
Попроще диалог в ubuntu http://askubuntu.com/questions/391089/how-to-change-the-time-server-in-ubuntu-12-04-lts-without-installing-the-ntp-p

Если бы я делал такой диалог, то я бы его и не делал )
Вызвал бы системный
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #7 : Ноябрь 19, 2015, 15:54 »

спасибо за советы, буду разбираться)
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #8 : Ноябрь 19, 2015, 17:17 »

Меня еще смущает то, что список  time_zone.availableTimeZoneIds() кроме стандартных зон типа (Area/Location) содержит и записи типа (UTC+00::00).
Для чего они там?
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #9 : Ноябрь 20, 2015, 10:53 »

Думаю, что это связано с тем, что, допустим, у вас база не учитывает то, что в России отменили межсезонный переход, а выставлять часовой пояс надо...
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #10 : Ноябрь 20, 2015, 10:54 »

Думаю, вам будет интересно почитать эту статью
Записан
billy4685
Крякер
****
Offline Offline

Сообщений: 306


Просмотр профиля
« Ответ #11 : Ноябрь 22, 2015, 23:59 »

спасибо)) эту статью видел, так мельком пока проглядел)) будем читать)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 23.