public static ZoneYearOffset Read([NotNull] IDateTimeZoneReader reader) { Preconditions.CheckNotNull(reader, nameof(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 a number of milliseconds for historical reasons. var timeOfDay = LocalTime.FromMillisecondsSinceMidnight(reader.ReadMilliseconds()); return(new ZoneYearOffset(mode, monthOfYear, dayOfMonth, dayOfWeek, advance, timeOfDay, addDay)); }