Почему неправильно считывается системное время?
https://msdn.microsoft.com/en-us/library/1f4c8f33.aspx
Все дело в том, что функция time() возвращает UTC метку времени. То есть, время по Гринвичу.
Тебе надо сделать корректировку на свой часовой пояс для получения локального времени.
Посмотри пример по этой ссылке:
en.cppreference.com/w/cpp/chrono/c/gmtime
gmtime и gmtime_s возвращают  время по гринвичу, вам скорее всего нужно использовать localtime или localtime_s.