C / C ++: почему местное время отображается неправильно относительно его часового пояса? - PullRequest
4 голосов
/ 04 августа 2011

Недавно я обнаружил странное поведение на языке Си, но понятия не имею, почему это происходит.

, когда я использую setenv (), установите TZ на GMT + 1 .вывод местного времени будет на один час меньше , чем время UTC.(см. вывод)

на самом деле, когда я устанавливаю TZ на GMT-1 .вывод местного времени будет на один час больше , чем время UTC.

Это не имеет смысла.И если вы не верите, вы можете попробовать приведенный ниже код на C. Кто-нибудь знает это странное поведение?это ошибка?

Код:

int main(int argc, char** argv)
{
       time_t now;
       struct tm *local;
       setenv("TZ", "GMT+1", 1);
       tzset();
       now = time(NULL);
       //Get the Local time (GMT+1)
       local = localtime(&now);
       printf("Local time and date: %s\n", asctime(local));
       //Get the system time (GMT)
       local = gmtime(&now);
       printf("UTC time and date: %s\n", asctime(local));
       return 0;
}

Выход:

Local time and date: Thu Aug  4 14:36:42 2011

UTC time and date: Thu Aug  4 15:36:42 2011

1 Ответ

5 голосов
/ 04 августа 2011

Это действительно очень запутанно, но не ошибка.

POSIX указывает это:

Если перед ним стоит «-», часовой пояс должен быть к востоку от премьер-меридиана; в противном случае он должен быть западным (что может быть указано необязательным предшествующим '+').

Итак, это в основном обратное тому, что вы могли ожидать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...