Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Ноябрь 18, 2015, 15:35



Название: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: billy4685 от Ноябрь 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);
}
Но их тут слишком много. Может просто можно перебрать их и если для зоны одна и та же абривиатура, выводить ее один раз.
А как быть с летним и зимним временем? Где хранятся эти записи?


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: __Heaven__ от Ноябрь 19, 2015, 09:48
Код
C++ (Qt)
QList<QByteArray> QTimeZone::availableTimeZoneIds()
?


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: billy4685 от Ноябрь 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. Но как быть с летним/зимним временем, пока не знаю.


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: billy4685 от Ноябрь 19, 2015, 13:01
У кого есть замечания, и советы как правильно реализовывать интерфейс для выбора часовых поясов, милости прошу. Думаю не только мне это будет интересно))


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


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: __Heaven__ от Ноябрь 19, 2015, 13:16
А строки складывать вы можете в QMap, например, чтобы отсеять дубли


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: qate от Ноябрь 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

Если бы я делал такой диалог, то я бы его и не делал )
Вызвал бы системный


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: billy4685 от Ноябрь 19, 2015, 15:54
спасибо за советы, буду разбираться)


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: billy4685 от Ноябрь 19, 2015, 17:17
Меня еще смущает то, что список  time_zone.availableTimeZoneIds() кроме стандартных зон типа (Area/Location) содержит и записи типа (UTC+00::00).
Для чего они там?


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: __Heaven__ от Ноябрь 20, 2015, 10:53
Думаю, что это связано с тем, что, допустим, у вас база не учитывает то, что в России отменили межсезонный переход, а выставлять часовой пояс надо...


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: __Heaven__ от Ноябрь 20, 2015, 10:54
Думаю, вам будет интересно почитать эту (https://ru.wikipedia.org/wiki/Tz_database) статью


Название: Re: Возможно ли средствами Qt получить список часовых поясов?
Отправлено: billy4685 от Ноябрь 22, 2015, 23:59
спасибо)) эту статью видел, так мельком пока проглядел)) будем читать)