У меня есть объект struct tm, который преобразован в UNIX time_t с помощью mktime, который при передаче в конструктор COleDateTime, кажется, добавляет час для учета летнего времени (время Великобритании), хотя документация для COleDateTime предполагает, что он игнорирует DST.
Если я создаю свое время с SYSTEMTIME и передаю этот объект COleDateTime, проблема исчезнет. Кто-нибудь знает, почему это может происходить? Это из устаревшего кода, поэтому замена всего на SYSTEMTIME не может быть решением.
Вот мой пример кода:
timeinfo.tm_year = 2018 - 1900;
timeinfo.tm_mon = 6 - 1;
timeinfo.tm_mday = 1;
timeinfo.tm_isdst = 0;
timeinfo.tm_hour = 10;
timeinfo.tm_min = 30;
timeinfo.tm_sec = 40;
auto unix = mktime( &timeinfo );
printf("UNIX time %lld\n", unix);
COleDateTime date(unix);
printf("COleDateTime: %f\n", date.m_dt);
CString res = date.Format();
printf("Formatted: %ls\n", res.GetString());





Ответил на свой вопрос:
COleDateTime Конструктор time_t внутренне использует CTime, который, независимо от того, что говорится в документации для COleDateTime, делает учитывает переменные среды для локали и часового пояса.