Member 703245 Ответов: 0

Как использовать SystemTimeToTzSpecificLocalTime


Я преобразования времени UTC в местное время. Вот мои коды:

GetSystemTime(&stUTC);
dt = SystemTimeToDateTime(stUTC);
s = FormatDateTime("mm/dd/yyyy  hh:nn:ss.zzz", dt);
RichEdit1->Lines->Add("UTC Time:    " + s);

// incorrect conversion
DWORD d;
d = GetTimeZoneInformation(&tz);
if (d == TIME_ZONE_ID_UNKNOWN)
   RichEdit1->Lines->Add("TIME_ZONE_ID_UNKNOWN");
else if (d == TIME_ZONE_ID_STANDARD)
   RichEdit1->Lines->Add("TIME_ZONE_ID_STANDARD");
else if (d == TIME_ZONE_ID_DAYLIGHT)
   RichEdit1->Lines->Add("TIME_ZONE_ID_DAYLIGHT");
else
   RichEdit1->Lines->Add("UNKNOWN");
SystemTimeToTzSpecificLocalTime(&tz, &stUTC, &stLocal);
dt = SystemTimeToDateTime(stLocal);
s = FormatDateTime("mm/dd/yyyy  hh:nn:ss.zzz", dt);
RichEdit1->Lines->Add("Local Time1:    " + s);

// correct conversion
SystemTimeToFileTime(&stUTC, &ft);
FileTimeToLocalFileTime(&ft, &ft);
FileTimeToSystemTime(&ft, &stLocal);
dt = SystemTimeToDateTime(stLocal);
s = FormatDateTime("mm/dd/yyyy  hh:nn:ss.zzz", dt);
RichEdit1->Lines->Add("Local Time2:  " + s);


Коды работали, когда в свойствах даты и времени Windows установлен флажок "Автоматически настраивать часы для перехода на летнее время".
UTC время: 18.03.2010 16:43:12.037
TIME_ZONE_ID_DAYLIGHT
Местное Время 1: 18.03.2010 09: 43:12.037
Местное Время 2: 18.03.2010 09: 43:12.037

Однако, если флажок не установлен, я получу неверное время из SystemTimeToTzSpecificLocalTime.
UTC время: 18.03.2010 16:48:24.422
TIME_ZONE_ID_DAYLIGHT
Местное Время 1: 18.03.2010 09: 48:24.422
Местное Время 2: 18.03.2010 08:48:24.422

Я неправильно использовал эту функцию? Спасибо!

[Изменено: добавлено форматирование кода]

0 Ответов