// // enumerate all time zones till find a match and with valid key name // internal static unsafe bool FindMatchToCurrentTimeZone(TimeZoneInformation timeZoneInformation) { uint index = 0; uint result = 0; // ERROR_SUCCESS bool notSupportedDaylightSaving = CheckDaylightSavingTimeNotSupported(timeZoneInformation); TIME_DYNAMIC_ZONE_INFORMATION tdzi = new TIME_DYNAMIC_ZONE_INFORMATION(); while (result == 0) { result = Interop.mincore.EnumDynamicTimeZoneInformation(index, out tdzi); if (result == 0) { string s = new String(tdzi.StandardName); if (!String.IsNullOrEmpty(s) && EqualStandardDates(timeZoneInformation, ref tdzi) && (notSupportedDaylightSaving || EqualDaylightDates(timeZoneInformation, ref tdzi)) && String.Compare(s, timeZoneInformation.StandardName, StringComparison.Ordinal) == 0) { // found a match timeZoneInformation.TimeZoneKeyName = s; return(true); } } index++; } return(false); }
public unsafe TimeZoneInformation(TIME_DYNAMIC_ZONE_INFORMATION dtzi) { StandardName = new string(dtzi.StandardName); DaylightName = new string(dtzi.DaylightName); TimeZoneKeyName = new string(dtzi.TimeZoneKeyName); Dtzi = dtzi; }
private static bool EqualDaylightDates(TimeZoneInformation timeZone, ref TIME_DYNAMIC_ZONE_INFORMATION tdzi) { return(timeZone.Dtzi.DaylightBias == tdzi.DaylightBias && timeZone.Dtzi.DaylightDate.wYear == tdzi.DaylightDate.wYear && timeZone.Dtzi.DaylightDate.wMonth == tdzi.DaylightDate.wMonth && timeZone.Dtzi.DaylightDate.wDayOfWeek == tdzi.DaylightDate.wDayOfWeek && timeZone.Dtzi.DaylightDate.wDay == tdzi.DaylightDate.wDay && timeZone.Dtzi.DaylightDate.wHour == tdzi.DaylightDate.wHour && timeZone.Dtzi.DaylightDate.wMinute == tdzi.DaylightDate.wMinute && timeZone.Dtzi.DaylightDate.wSecond == tdzi.DaylightDate.wSecond && timeZone.Dtzi.DaylightDate.wMilliseconds == tdzi.DaylightDate.wMilliseconds); }
private static bool EqualStandardDates(TimeZoneInformation timeZone, ref TIME_DYNAMIC_ZONE_INFORMATION tdzi) { return timeZone.Dtzi.Bias == tdzi.Bias && timeZone.Dtzi.StandardBias == tdzi.StandardBias && timeZone.Dtzi.StandardDate.wYear == tdzi.StandardDate.wYear && timeZone.Dtzi.StandardDate.wMonth == tdzi.StandardDate.wMonth && timeZone.Dtzi.StandardDate.wDayOfWeek == tdzi.StandardDate.wDayOfWeek && timeZone.Dtzi.StandardDate.wDay == tdzi.StandardDate.wDay && timeZone.Dtzi.StandardDate.wHour == tdzi.StandardDate.wHour && timeZone.Dtzi.StandardDate.wMinute == tdzi.StandardDate.wMinute && timeZone.Dtzi.StandardDate.wSecond == tdzi.StandardDate.wSecond && timeZone.Dtzi.StandardDate.wMilliseconds == tdzi.StandardDate.wMilliseconds; }
// // enumerate all time zones till find a match and with valid key name // internal static unsafe bool FindMatchToCurrentTimeZone(TimeZoneInformation timeZoneInformation) { uint index = 0; uint result = 0; // ERROR_SUCCESS bool notSupportedDaylightSaving = CheckDaylightSavingTimeNotSupported(timeZoneInformation); TIME_DYNAMIC_ZONE_INFORMATION tdzi = new TIME_DYNAMIC_ZONE_INFORMATION(); while (result == 0) { result = Interop.mincore.EnumDynamicTimeZoneInformation(index, out tdzi); if (result == 0) { string s = new String(tdzi.StandardName); if (!String.IsNullOrEmpty(s) && EqualStandardDates(timeZoneInformation, ref tdzi) && (notSupportedDaylightSaving || EqualDaylightDates(timeZoneInformation, ref tdzi)) && String.Compare(s, timeZoneInformation.StandardName, StringComparison.Ordinal) == 0) { // found a match timeZoneInformation.TimeZoneKeyName = s; return true; } } index++; } return false; }