C ++ 64-битная временная метка до 32-битной time_t

Я хочу преобразовать 64-битную метку времени (у нас) в строку даты, чтобы установить системную дату с помощью системной команды «дата». Я нашел / реализовал это решение:

char loc_ach_buf[25];
uint64_t loc_ui64_TimeStamp_us;
time_t loc_t_TimeStamp_s;
...
loc_t_TimeStamp_s = loc_ui64_TimeStamp_us / 1000000;
strftime(loc_ach_buf, sizeof(loc_ach_buf), "date %Y%m%d%H%M.%S", gmtime(&loc_t_TimeStamp_s));
system(loc_ach_buf);

Это работает нормально, но моя проблема в том, что time_t является 32-битным значением в моей системе, и поэтому будут проблемы Проблема 2038 года. Есть идеи как решить это? Или есть альтернативы strftime.

2

Решение

Зачем использовать системную команду «дата»? Использовать SetSystemTime Вызов API.

0

Другие решения

Я не уверен, с каким набором инструментов вы работаете, но компилятор Microsoft поддерживает функцию _localtime64_s который преобразует 64-битное значение времени в структуру tm, которую вы затем можете использовать с STRFTIME.

Если ваш CRT не поддерживает 64-битные функции времени, посмотрите на это: Версия gmtime (), которая работает вокруг ошибки 2038

0