private static void ParseRegTzi (List<AdjustmentRule> adjustmentRules, int start_year, int end_year, byte [] buffer)
{
//int standard_bias = BitConverter.ToInt32 (buffer, 4); /* not sure how to handle this */
int daylight_bias = BitConverter.ToInt32 (buffer, 8);
int standard_year = BitConverter.ToInt16 (buffer, 12);
int standard_month = BitConverter.ToInt16 (buffer, 14);
int standard_dayofweek = BitConverter.ToInt16 (buffer, 16);
int standard_day = BitConverter.ToInt16 (buffer, 18);
int standard_hour = BitConverter.ToInt16 (buffer, 20);
int standard_minute = BitConverter.ToInt16 (buffer, 22);
int standard_second = BitConverter.ToInt16 (buffer, 24);
int standard_millisecond = BitConverter.ToInt16 (buffer, 26);
int daylight_year = BitConverter.ToInt16 (buffer, 28);
int daylight_month = BitConverter.ToInt16 (buffer, 30);
int daylight_dayofweek = BitConverter.ToInt16 (buffer, 32);
int daylight_day = BitConverter.ToInt16 (buffer, 34);
int daylight_hour = BitConverter.ToInt16 (buffer, 36);
int daylight_minute = BitConverter.ToInt16 (buffer, 38);
int daylight_second = BitConverter.ToInt16 (buffer, 40);
int daylight_millisecond = BitConverter.ToInt16 (buffer, 42);
if (standard_month == 0 || daylight_month == 0)
return;
DateTime start_date;
DateTime start_timeofday = new DateTime (1, 1, 1, daylight_hour, daylight_minute, daylight_second, daylight_millisecond);
TransitionTime start_transition_time;
if (daylight_year == 0) {
start_date = new DateTime (start_year, 1, 1);
start_transition_time = TransitionTime.CreateFloatingDateRule (
start_timeofday, daylight_month, daylight_day,
(DayOfWeek) daylight_dayofweek);
}
else {
start_date = new DateTime (daylight_year, daylight_month, daylight_day,
daylight_hour, daylight_minute, daylight_second, daylight_millisecond);
start_transition_time = TransitionTime.CreateFixedDateRule (
start_timeofday, daylight_month, daylight_day);
}
DateTime end_date;
DateTime end_timeofday = new DateTime (1, 1, 1, standard_hour, standard_minute, standard_second, standard_millisecond);
TransitionTime end_transition_time;
if (standard_year == 0) {
end_date = new DateTime (end_year, 12, 31);
end_transition_time = TransitionTime.CreateFloatingDateRule (
end_timeofday, standard_month, standard_day,
(DayOfWeek) standard_dayofweek);
}
else {
end_date = new DateTime (standard_year, standard_month, standard_day,
standard_hour, standard_minute, standard_second, standard_millisecond);
end_transition_time = TransitionTime.CreateFixedDateRule (
end_timeofday, standard_month, standard_day);
}
TimeSpan daylight_delta = new TimeSpan(0, -daylight_bias, 0);
adjustmentRules.Add (AdjustmentRule.CreateAdjustmentRule (
start_date, end_date, daylight_delta,
start_transition_time, end_transition_time));
}
#endif