Как использовать 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
Я неправильно использовал эту функцию? Спасибо!
[Изменено: добавлено форматирование кода]