/** Set the current time zone @param const int timezone Time zone value to set in minutes. Verify: localtime = UTC + timezone @return bool true if successfull, false if errors (see CGErrorMgr::GetLastWinMsg()) **/ bool CTime::SetTimeZone(const int timezone) { #ifdef WIN32 TIME_ZONE_INFORMATION tzi; if (GetTimeZoneInformation(&tzi) == TIME_ZONE_ID_INVALID) return false; tzi.Bias = -(long)(timezone); if (!SetTimeZoneInformation(&tzi)) return false; return true; #else if (system("tzselect > /var/tmp/tz_out.txt") != 0) { return false; } FILE *f; CString zonename; if ((f = fopen("/var/tmp/tz_out.txt", "r"))) { char buffer[128]; //unsigned long len, cnt = 0; if ( fscanf(f, "%s", buffer) != 1) { fclose (f); return false; } zonename = buffer; fclose (f); } else { return false; } return SetTimeZoneName(zonename); #endif }
BOOL My_SetTimeZoneInformation() { CONST TIME_ZONE_INFORMATION * lpTimeZoneInformation=NULL; BOOL returnVal_Real = NULL; BOOL returnVal_Intercepted = NULL; DWORD error_Real = 0; DWORD error_Intercepted = 0; disableInterception(); returnVal_Real = SetTimeZoneInformation (lpTimeZoneInformation); error_Real = GetLastError(); enableInterception(); returnVal_Intercepted = SetTimeZoneInformation (lpTimeZoneInformation); error_Intercepted = GetLastError(); return ((returnVal_Real == returnVal_Intercepted) && (error_Real == error_Intercepted)); }
/** * Sets the system time to GPS time if not yet done and * defined in settings */ static void SystemClockTimer() { #ifdef WIN32 const NMEAInfo &basic = CommonInterface::Basic(); // Altair doesn't have a battery-backed up realtime clock, // so as soon as we get a fix for the first time, set the // system clock to the GPS time. static bool sysTimeInitialised = false; if (basic.alive && CommonInterface::GetComputerSettings().set_system_time_from_gps && basic.gps.real /* assume that we only have a valid date and time when we have a full GPS fix */ && basic.location_available && !sysTimeInitialised) { SYSTEMTIME sysTime; ::GetSystemTime(&sysTime); sysTime.wYear = (unsigned short)basic.date_time_utc.year; sysTime.wMonth = (unsigned short)basic.date_time_utc.month; sysTime.wDay = (unsigned short)basic.date_time_utc.day; sysTime.wHour = (unsigned short)basic.date_time_utc.hour; sysTime.wMinute = (unsigned short)basic.date_time_utc.minute; sysTime.wSecond = (unsigned short)basic.date_time_utc.second; sysTime.wMilliseconds = 0; ::SetSystemTime(&sysTime); #if defined(_WIN32_WCE) && defined(GNAV) TIME_ZONE_INFORMATION tzi; tzi.Bias = - CommonInterface::GetComputerSettings().utc_offset / 60; _tcscpy(tzi.StandardName,TEXT("Altair")); tzi.StandardDate.wMonth= 0; // disable daylight savings tzi.StandardBias = 0; _tcscpy(tzi.DaylightName,TEXT("Altair")); tzi.DaylightDate.wMonth= 0; // disable daylight savings tzi.DaylightBias = 0; SetTimeZoneInformation(&tzi); #endif sysTimeInitialised =true; } else if (!basic.alive) /* set system clock again after a device reconnect; the new device may have a better GPS time */ sysTimeInitialised = false; #else // XXX #endif }
static VOID SetLocalTimeZone(HWND hwnd) { TIME_ZONE_INFORMATION TimeZoneInformation; PTIMEZONE_ENTRY Entry; DWORD dwIndex; DWORD i; dwIndex = (DWORD)SendMessageW(hwnd, CB_GETCURSEL, 0, 0); i = 0; Entry = TimeZoneListHead; while (i < dwIndex) { if (Entry == NULL) return; i++; Entry = Entry->Next; } wcscpy(TimeZoneInformation.StandardName, Entry->StandardName); wcscpy(TimeZoneInformation.DaylightName, Entry->DaylightName); TimeZoneInformation.Bias = Entry->TimezoneInfo.Bias; TimeZoneInformation.StandardBias = Entry->TimezoneInfo.StandardBias; TimeZoneInformation.DaylightBias = Entry->TimezoneInfo.DaylightBias; memcpy(&TimeZoneInformation.StandardDate, &Entry->TimezoneInfo.StandardDate, sizeof(SYSTEMTIME)); memcpy(&TimeZoneInformation.DaylightDate, &Entry->TimezoneInfo.DaylightDate, sizeof(SYSTEMTIME)); /* Set time zone information */ SetTimeZoneInformation(&TimeZoneInformation); }