c lang time time timezone не актуален?Как изменить аппаратный часовой пояс MacBook MacOS? - PullRequest
0 голосов
/ 08 октября 2018

Я пишу небольшую программу о времени, но, похоже, в настройках часового пояса MacBook есть некоторые проблемы, мой текущий часовой пояс в Системные настройки сейчас равен JST (UTC + 9).

#include <time.h>
#include <stdlib.h>
#include <stdio.h>

int main (int argc, char *argv[]) {

        time_t time_in_second;
        struct tm *time_today;

        time (&time_in_second);

        time_t today_in_second = time_in_second - (time_in_second % 86400);
        time_today = gmtime(&today_in_second);  // will out put 00:00
        time_today = localtime(&today_in_second);  // will output 09:00

        printf ("year: %d\nmonth: %d\nday: %d\nhour: %d\nminuts: %d\nsecond: %d\n", \
            1900+time_today->tm_year, 1+time_today->tm_mon,\
            time_today->tm_mday, time_today->tm_hour, time_today->tm_min, time_today->tm_sec);

    return 0;
}

Не должен ли localtime выводить 00:00 вместо gmtime?

Или я просто недопонимаю по этому поводу?

Как я могу это исправить?Я провел некоторый поиск, но у меня есть только способ изменить настройку часового пояса операционной системы.

Могу ли я изменить аппаратный часовой пояс на UTC, чтобы избежать этой проблемы?

1 Ответ

0 голосов
/ 08 октября 2018

Это поведение правильно.time_t относительно UTC;выполнение математических операций со значением time_t (например, округление до ближайшего дня) даст результаты относительно GMT.Если вы хотите выполнить эти операции относительно вашего местного часового пояса, вам нужно будет исправить это.

«Аппаратный часовой пояс» не имеет отношения к этому поведению, и изменение его не будет иметь никакого эффекта, дажеесли бы это было возможно.(macOS не поддерживает сохранение системных часов в качестве местного времени; в некоторых старых системах Windows это было обычной практикой.)

...