Это мое понимание, и я могу ошибаться ...
Я не уверен, как это делает OS X, но в Linux стандартные функции часового пояса C используют базу данных Olson , который действительно довольно мощный (так как он имеет полный список описаний локалей и отслеживает исторические правила часовых поясов, а также текущие правила).
Чтобы установить часовой пояс, позвоните tzset .Эта функция автоматически вызывается другими функциями, связанными со временем, но вы можете вручную указать другой часовой пояс из системного значения по умолчанию, установив переменную среды TZ, затем вызвав tzset.Например:
int main(int argc, char *argv[]) {
time_t t = time(NULL);
printf("%s\n", ctime(&t));
setenv("TZ", "America/Chicago", 1);
printf("%s\n", ctime(&t));
return 0;
}
Вызов tzset также устанавливает глобальную переменную timezone
, которую можно использовать для поиска смещения по Гринвичу в секундах для текущего часового пояса.
Эти функции позволяют толькоВы используете один часовой пояс за раз, и хотя все это (за исключением, возможно, глобальной переменной timezone
) должно быть стандартным C, платформы, кроме Linux, могут не иметь полной поддержки списков локалей, изменения летнего времени,и т.д. Если вы обнаружите, что это не соответствует вашим потребностям, вы можете попробовать использовать сторонние библиотеки, такие как код, распространяемый вместе с [база данных Olson] или ICU TimeZone class (также можно использовать из C).