CodeInside
@CodeInside

Почему неправильно считывается системное время?

char nowDateAndTime[64];
	tm timeInfo;
	time_t now = 0;

  now = time(0);
	gmtime_s(&timeInfo, &now);
	strftime(nowDateAndTime, sizeof(nowDateAndTime), "%Y-%m-%d %H:%M:%S", &timeInfo);


В nowDateAndTime после этих строк все данные валидны, кроме часов. Тестировал на двух компьютерах (1) Windows 8.1 x64 Visual Studio 2013; 2) Windows 10 x32 Visual Studio 2015) и на обоих время nowDateAndTime ровно на два часа меньше системного. Почему так и как исправить?
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
https://msdn.microsoft.com/en-us/library/1f4c8f33.aspx

Все дело в том, что функция time() возвращает UTC метку времени. То есть, время по Гринвичу.
Тебе надо сделать корректировку на свой часовой пояс для получения локального времени.

Посмотри пример по этой ссылке:
en.cppreference.com/w/cpp/chrono/c/gmtime
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
alsopub
@alsopub
Разница, видимо, на часовой пояс.
Посмотрите пример тут - all-ht.ru/inf/prog/c/func/gmtime.html
Тут дополнительно применяется gmtime() для учета часового пояса.
Ответ написан
gmtime и gmtime_s возвращают время по гринвичу, вам скорее всего нужно использовать localtime или localtime_s.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы