API gmtime возвращает разное время на платформах WEC7 и WINDOWS7 - PullRequest
0 голосов
/ 19 декабря 2018

Я работаю над развитием приложения WEC7. Я хочу преобразовать текущее системное время (значение времени time_t) в структуру tm в WEC7. В Windows 7 мы можем сделать это напрямую, вызвав gmtime API.

Нов WEC7 я обнаружил библиотеку wcecompat-master, в которой реализация API gmtime выглядит следующим образом:

struct tm* gmtime(const time_t* clock)
{

FILETIME  ftUtc;
SYSTEMTIME stUtc;

if (clock == NULL)
return NULL;

// convert time_t to FILETIME
UnixTimeToFileTime(*clock,&ftUtc);

// convert to SYSTEMTIME
if (!FileTimeToSystemTime(&ftUtc, &stUtc))
return NULL;

stUtc.wMilliseconds = 500;
// fill return structure
st_tm.tm_sec = stUtc.wSecond;
st_tm.tm_min = stUtc.wMinute;
st_tm.tm_hour = stUtc.wHour;
st_tm.tm_mday = stUtc.wDay;
st_tm.tm_mon = stUtc.wMonth;
st_tm.tm_year = stUtc.wYear;
st_tm.tm_wday = stUtc.wDayOfWeek;
st_tm.tm_yday = dayOfYear(stUtc.wYear, stUtc.wMonth-1, stUtc.wDay);
st_tm.tm_isdst = 0;

return &st_tm;

}

void UnixTimeToFileTime(time_t t, LPFILETIME pft)
{
// Note that LONGLONG is a 64-bit value
LONGLONG ll;

ll = Int32x32To64(t, 10000000) + 116444736000000000;
pft->dwLowDateTime = (DWORD)ll;
    pft->dwHighDateTime = (DWORD)(ll >> 32);
}

Когда в WEC7 вызывается API gmtime, он возвращает год + 1900 и месяц + 1 по сравнению с Windows7.

пример: когда текущее системное время 1545258796 секунд отправляется в API gmtime, возвращаемый результат для обоих приведен ниже

- Windows7 вернул время 0118: 11: 19: 22: 33: 16

- WEC7 вернул время 2018: 12: 19: 22: 33: 16

Может ли кто-нибудь подсказать мне причину и решение для этой реализации WEC7 gmtime?

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