//
        // 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);
        }
Example #2
0
 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);
 }
Example #4
0
 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;
 }
Example #5
0
        //
        // 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;
        }