Fix DST Error on Windows
This commit is contained in:
parent
f995f47965
commit
4802f15231
1 changed files with 12 additions and 2 deletions
|
@ -264,12 +264,19 @@ OS::Date OS_Windows::get_date(bool p_utc) const {
|
|||
GetLocalTime(&systemtime);
|
||||
}
|
||||
|
||||
//Get DST information from Windows, but only if p_utc is false.
|
||||
TIME_ZONE_INFORMATION info;
|
||||
bool daylight = false;
|
||||
if (!p_utc && GetTimeZoneInformation(&info) == TIME_ZONE_ID_DAYLIGHT) {
|
||||
daylight = true;
|
||||
}
|
||||
|
||||
Date date;
|
||||
date.day = systemtime.wDay;
|
||||
date.month = Month(systemtime.wMonth);
|
||||
date.weekday = Weekday(systemtime.wDayOfWeek);
|
||||
date.year = systemtime.wYear;
|
||||
date.dst = false;
|
||||
date.dst = daylight;
|
||||
return date;
|
||||
}
|
||||
|
||||
|
@ -295,16 +302,19 @@ OS::TimeZoneInfo OS_Windows::get_time_zone_info() const {
|
|||
daylight = true;
|
||||
}
|
||||
|
||||
// Daylight Bias needs to be added to the bias if DST is in effect, or else it will not properly update.
|
||||
TimeZoneInfo ret;
|
||||
if (daylight) {
|
||||
ret.name = info.DaylightName;
|
||||
ret.bias = info.Bias + info.DaylightBias;
|
||||
} else {
|
||||
ret.name = info.StandardName;
|
||||
ret.bias = info.Bias + info.StandardBias;
|
||||
}
|
||||
|
||||
// Bias value returned by GetTimeZoneInformation is inverted of what we expect
|
||||
// For example, on GMT-3 GetTimeZoneInformation return a Bias of 180, so invert the value to get -180
|
||||
ret.bias = -info.Bias;
|
||||
ret.bias = -ret.bias;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue