16
0
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:
tmj-fstate
2018-06-22 18:24:48 +02:00
parent c0bf973c58
commit c40d0abcf9
9 changed files with 79 additions and 45 deletions

View File

@@ -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 *)&registrytimezoneinfo, &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