/// <summary> /// Reads a time zone from the specified reader. /// </summary> /// <param name="reader">The reader.</param> /// <param name="id">The id.</param> /// <returns>The time zone.</returns> public static DateTimeZone Read(IDateTimeZoneReader reader, string id) { int size = reader.ReadCount(); var periods = new ZoneInterval[size]; var start = reader.ReadZoneIntervalTransition(null); for (int i = 0; i < size; i++) { var name = reader.ReadString(); var offset = reader.ReadOffset(); var savings = reader.ReadOffset(); var nextStart = reader.ReadZoneIntervalTransition(start); periods[i] = new ZoneInterval(name, start, nextStart, offset, savings); start = nextStart; } var tailZone = reader.ReadByte() == 1 ? DaylightSavingsDateTimeZone.Read(reader, id + "-tail") : null; return(new PrecalculatedDateTimeZone(id, periods, tailZone)); }
/// <summary> /// Reads a time zone from the specified reader. /// </summary> /// <param name="reader">The reader.</param> /// <param name="id">The id.</param> /// <returns>The time zone.</returns> internal static DateTimeZone Read([Trusted][NotNull] IDateTimeZoneReader reader, [Trusted][NotNull] string id) { Preconditions.DebugCheckNotNull(reader, nameof(reader)); Preconditions.DebugCheckNotNull(id, nameof(id)); int size = reader.ReadCount(); var periods = new ZoneInterval[size]; // It's not entirely clear why we don't just assume that the first zone interval always starts at Instant.BeforeMinValue // (given that we check that later) but we don't... and changing that now could cause compatibility issues. var start = reader.ReadZoneIntervalTransition(null); for (int i = 0; i < size; i++) { var name = reader.ReadString(); var offset = reader.ReadOffset(); var savings = reader.ReadOffset(); var nextStart = reader.ReadZoneIntervalTransition(start); periods[i] = new ZoneInterval(name, start, nextStart, offset, savings); start = nextStart; } var tailZone = reader.ReadByte() == 1 ? DaylightSavingsDateTimeZone.Read(reader, id + "-tail") : null; return(new PrecalculatedDateTimeZone(id, periods, tailZone)); }