Example #1
0
        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 }
                       ));
        }