http://bugs.winehq.org/show_bug.cgi?id=2449
Summary: bug in dlls/kernel/time.c. incorrect time conversion in TzSpecificLocalTimeToSystemTime Product: Wine Version: 20040813 Platform: All OS/Version: All Status: UNCONFIRMED Severity: normal Priority: P2 Component: wine-kernel AssignedTo: wine-bugs@winehq.org ReportedBy: oradba@inbox.ru
a quote from your source:
if (!SystemTimeToFileTime(lpLocalTime, &ft)) return FALSE;
t = ft.dwHighDateTime; t <<= 32; t += (UINT)ft.dwLowDateTime;
if (!_GetTimezoneBias(&tzinfo, &lpLocalTime, &lBias)) return FALSE;
you pass LocalTime to _GetTimeZoneBias, instead of systemtime. Yes, we can't figure if it is daylight or standard time in one hour between daylight->standard change 02:00-03:00, its ok. In original version we had such error in Bias+DaylightBias interval (up to 24 hours, 4 hours for moscow - for example), so I reduced error period to DaylightBias (1 hour). Now it doesn't depend on time zone.
my version:
LONGLONG t2; SYSTEMTIME st;
t2 = t + (LONGLONG)tzinfo.Bias * 600000000; if (!FileTimeToSystemTime((FILETIME*)&t2, &st)) return FALSE; if (!_GetTimezoneBias(&tzinfo, &st, &lBias)) return FALSE;