internal static StandardDaylightAlternatingMap Read(IDateTimeZoneReader reader) { Preconditions.CheckNotNull(reader, nameof(reader)); Offset standardOffset = reader.ReadOffset(); string standardName = reader.ReadString(); ZoneYearOffset standardYearOffset = ZoneYearOffset.Read(reader); string daylightName = reader.ReadString(); ZoneYearOffset daylightYearOffset = ZoneYearOffset.Read(reader); Offset savings = reader.ReadOffset(); ZoneRecurrence standardRecurrence = new ZoneRecurrence(standardName, Offset.Zero, standardYearOffset, int.MinValue, int.MaxValue); ZoneRecurrence dstRecurrence = new ZoneRecurrence(daylightName, savings, daylightYearOffset, int.MinValue, int.MaxValue); return(new StandardDaylightAlternatingMap(standardOffset, standardRecurrence, dstRecurrence)); }
/// <summary> /// Reads a fixed time zone from the specified reader. /// </summary> /// <param name="reader">The reader.</param> /// <param name="id">The id.</param> /// <returns>The fixed time zone.</returns> public static DateTimeZone Read(IDateTimeZoneReader reader, string id) { Preconditions.CheckNotNull(reader, "reader"); Preconditions.CheckNotNull(reader, "id"); var offset = reader.ReadOffset(); return(new FixedDateTimeZone(id, offset)); }
/// <summary> /// Reads a fixed time zone from the specified reader. /// </summary> /// <param name="reader">The reader.</param> /// <param name="id">The id.</param> /// <returns>The fixed time zone.</returns> public static DateTimeZone Read([NotNull] IDateTimeZoneReader reader, [NotNull] string id) { Preconditions.CheckNotNull(reader, nameof(reader)); Preconditions.CheckNotNull(id, nameof(id)); var offset = reader.ReadOffset(); var name = reader.HasMoreData ? reader.ReadString() : id; return(new FixedDateTimeZone(id, offset, name)); }
/// <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)); }
/// <summary> /// Reads a recurrence from the specified reader. /// </summary> /// <param name="reader">The reader.</param> /// <returns>The recurrence read from the reader.</returns> public static ZoneRecurrence Read(IDateTimeZoneReader reader) { Preconditions.CheckNotNull(reader, "reader"); string name = reader.ReadString(); Offset savings = reader.ReadOffset(); ZoneYearOffset yearOffset = ZoneYearOffset.Read(reader); int fromYear = reader.ReadCount(); if (fromYear == 0) { fromYear = int.MinValue; } int toYear = reader.ReadCount(); return(new ZoneRecurrence(name, savings, yearOffset, fromYear, toYear)); }
public static ZoneYearOffset Read(IDateTimeZoneReader reader) { Preconditions.CheckNotNull(reader, "reader"); int flags = reader.ReadByte(); var mode = (TransitionMode)(flags >> 5); var dayOfWeek = (flags >> 2) & 7; var advance = (flags & 2) != 0; var addDay = (flags & 1) != 0; int monthOfYear = reader.ReadCount(); int dayOfMonth = reader.ReadSignedCount(); // The time of day is written as an offset for historical reasons. var ticksOfDay = reader.ReadOffset(); return(new ZoneYearOffset(mode, monthOfYear, dayOfMonth, dayOfWeek, advance, new LocalTime(ticksOfDay.Ticks), addDay)); }