public static TimeZoneInfo ToSystemTimeZone(this PosixTz posixTz, int year, bool isDaylightSavingTime = true) { if ((object)posixTz == null) { return(null); } var id = posixTz.name; if (id.Length > 32) { id = id.Substring(0, 32); } var baseOffset = TimeSpan.FromSeconds(-posixTz.offset); if ((object)posixTz.dst == null || !isDaylightSavingTime) { return(TimeZoneInfo.CreateCustomTimeZone( id, baseOffset, posixTz.Format(), posixTz.name )); } var daylightDelta = TimeSpan.FromSeconds( posixTz.offset - posixTz.dst.offset ); var start = posixTz.dst.start.ToSystemTransitionTime(year); var end = posixTz.dst.end.ToSystemTransitionTime(year); var adjustmentRule = TimeZoneInfo.AdjustmentRule.CreateAdjustmentRule( new DateTime(year, 1, 1), new DateTime(year, 12, 31), daylightDelta, start, end ); return(TimeZoneInfo.CreateCustomTimeZone( id, baseOffset, posixTz.Format(), posixTz.name, posixTz.dst.name, new[] { adjustmentRule } )); }