Получить список часовых поясов на разных платформах в C - PullRequest
0 голосов
/ 26 октября 2011

Я разрабатываю программу на C, которая должна возвращать массив строк всех возможных областей, из которых компьютер имеет доступ к информации (якобы из базы данных tz). Мне нужно сделать эту кроссплатформенность между Linux (или, по крайней мере, Ubuntu) и Windows, чтобы любые общие подходы между двумя платформами сделали бы мою жизнь намного проще. Мне известно о нескольких способах сделать это в Windows (через реестр или подход, описанный здесь http://msdn.microsoft.com/en-us/library/ms171251(v=sql.90).aspx),, но я не смог найти никакого способа сделать это в Linux, кроме жесткого кодирования массива в Каков наилучший способ сделать это в Ubuntu, и есть ли в Windows лучший способ, чем два, о которых я упоминал выше?

Ответы [ 3 ]

3 голосов
/ 11 марта 2012

Дейв, содержимое каталога zoneinfo не только в дистрибутивах Linux, но и во многих (большинстве) других Unix.

Точное местоположение может отличаться в некоторых случаях(Я знаю только одно: в Linux много-много лет назад он находился в / usr / lib / zoneinfo, когда не было такого понятия, как / usr / share), поэтому его следует настраивать в вашем приложении.Но вы можете использовать / usr / share / zoneinfo по умолчанию, и это будет работать в 99,9% случаев.

0 голосов
/ 21 ноября 2014

Существует библиотека C ++ (я знаю, что вы сказали C, но вы можете написать оболочку ...) с именем ICU, которая имеет все необходимые функции для загрузки списка часовых поясов.

http://icu -project.org / apiref / icu4c / classTimeZone.html

Найдите эту функцию, чтобы получить полный список (другие функции можно использовать, если вы хотите каким-то образом фильтровать список):

/**
 * Returns an enumeration over all recognized time zone IDs. (i.e.,
 * all strings that createTimeZone() accepts)
 *
 * @return an enumeration object, owned by the caller.
 * @stable ICU 2.4
 */
static StringEnumeration* U_EXPORT2 createEnumeration();
0 голосов
/ 26 октября 2011

В Linux было бы достаточно пройтись по содержимому /usr/share/zoneinfo?

...