mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-18 07:49:19 +02:00
build 180622. time zone bias calculation fix, track events fix, passenger stop distance calculation fix
This commit is contained in:
39
World.cpp
39
World.cpp
@@ -74,6 +74,45 @@ simulation_time::init() {
|
||||
}
|
||||
|
||||
m_yearday = year_day( m_time.wDay, m_time.wMonth, m_time.wYear );
|
||||
|
||||
// calculate time zone bias
|
||||
// retrieve relevant time zone info from system registry (or fall back on supplied default)
|
||||
// TODO: select timezone matching defined geographic location and/or country
|
||||
struct registry_time_zone_info {
|
||||
long Bias;
|
||||
long StandardBias;
|
||||
long DaylightBias;
|
||||
SYSTEMTIME StandardDate;
|
||||
SYSTEMTIME DaylightDate;
|
||||
} registrytimezoneinfo = { -60, 0, -60, { 0, 10, 0, 5, 3, 0, 0, 0 }, { 0, 3, 0, 5, 2, 0, 0, 0 } };
|
||||
|
||||
#ifdef _WIN32
|
||||
TCHAR timezonekeyname[] { TEXT( "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\Central European Standard Time" ) };
|
||||
HKEY timezonekey { NULL };
|
||||
DWORD size { sizeof( registrytimezoneinfo ) };
|
||||
if( ::RegOpenKeyEx( HKEY_LOCAL_MACHINE, timezonekeyname, 0, KEY_QUERY_VALUE, &timezonekey ) == ERROR_SUCCESS ) {
|
||||
::RegQueryValueEx( timezonekey, "TZI", NULL, NULL, (BYTE *)®istrytimezoneinfo, &size );
|
||||
}
|
||||
#endif
|
||||
TIME_ZONE_INFORMATION timezoneinfo { 0 };
|
||||
timezoneinfo.Bias = registrytimezoneinfo.Bias;
|
||||
timezoneinfo.DaylightBias = registrytimezoneinfo.DaylightBias;
|
||||
timezoneinfo.DaylightDate = registrytimezoneinfo.DaylightDate;
|
||||
timezoneinfo.StandardBias = registrytimezoneinfo.StandardBias;
|
||||
timezoneinfo.StandardDate = registrytimezoneinfo.StandardDate;
|
||||
|
||||
auto zonebias { timezoneinfo.Bias };
|
||||
if( m_yearday < year_day( timezoneinfo.DaylightDate.wDay, timezoneinfo.DaylightDate.wMonth, m_time.wYear ) ) {
|
||||
zonebias += timezoneinfo.StandardBias;
|
||||
}
|
||||
else if( m_yearday < year_day( timezoneinfo.StandardDate.wDay, timezoneinfo.StandardDate.wMonth, m_time.wYear ) ) {
|
||||
zonebias += timezoneinfo.DaylightBias;
|
||||
}
|
||||
else {
|
||||
zonebias += timezoneinfo.StandardBias;
|
||||
}
|
||||
|
||||
m_timezonebias = ( zonebias / 60.0 );
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
Reference in New Issue
Block a user