CrankedUp ( TIME_ZONE_INFORMATION), sp3 Windows XP. .
TimeZoneInfo.AdjustmentRule[] adjustmentRules = timeZoneInfo.GetAdjustmentRules();
TimeZoneInfo.AdjustmentRule adjustmentRule = null;
if (adjustmentRules.Length > 0)
{
adjustmentRule = adjustmentRules.SingleOrDefault(ar => ar.DateStart <= DateTime.Now && DateTime.Now <= ar.DateEnd);
}
double bias = -timeZoneInfo.BaseUtcOffset.TotalMinutes;
string daylightName = timeZoneInfo.DaylightName;
string standardName = timeZoneInfo.StandardName;
double daylightBias = adjustmentRule == null ? -60 : -adjustmentRule.DaylightDelta.TotalMinutes;
int daylightDay = 0;
int daylightDayOfWeek = 0;
int daylightHour = 0;
int daylightMonth = 0;
int standardDay = 0;
int standardDayOfWeek = 0;
int standardHour = 0;
int standardMonth = 0;
if (adjustmentRule != null)
{
TimeZoneInfo.TransitionTime daylightTime = adjustmentRule.DaylightTransitionStart;
TimeZoneInfo.TransitionTime standardTime = adjustmentRule.DaylightTransitionEnd;
daylightDay = daylightTime.IsFixedDateRule ? daylightTime.Day : daylightTime.Week;
daylightDayOfWeek = daylightTime.IsFixedDateRule ? -1 : (int)daylightTime.DayOfWeek;
daylightHour = daylightTime.TimeOfDay.Hour;
daylightMonth = daylightTime.Month;
standardDay = standardTime.IsFixedDateRule ? standardTime.Day : standardTime.Week;
standardDayOfWeek = standardTime.IsFixedDateRule ? -1 : (int)standardTime.DayOfWeek;
standardHour = standardTime.TimeOfDay.Hour;
standardMonth = standardTime.Month;
}