Exemple #1
0
        internal static TzdbZone1970Location Read(IDateTimeZoneReader reader)
        {
            int latitudeSeconds  = reader.ReadSignedCount();
            int longitudeSeconds = reader.ReadSignedCount();
            int countryCount     = reader.ReadCount();
            var countries        = new List <Country>();

            for (int i = 0; i < countryCount; i++)
            {
                string countryName = reader.ReadString();
                string countryCode = reader.ReadString();
                countries.Add(new Country(code: countryCode, name: countryName));
            }
            string zoneId  = reader.ReadString();
            string comment = reader.ReadString();

            // We could duplicate the validation, but there's no good reason to. It's odd
            // to catch ArgumentException, but we're in pretty tight control of what's going on here.
            try
            {
                return(new TzdbZone1970Location(latitudeSeconds, longitudeSeconds, countries, zoneId, comment));
            }
            catch (ArgumentException e)
            {
                throw new InvalidNodaDataException("Invalid zone location data in stream", e);
            }
        }
        /// <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));
        }
Exemple #3
0
        /// <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));
        }
Exemple #4
0
        /// <summary>
        /// Reads a mapping from a reader.
        /// </summary>
        internal static MapZone Read(IDateTimeZoneReader reader)
        {
            string windowsId = reader.ReadString();
            string territory = reader.ReadString();
            int    count     = reader.ReadCount();

            string[] tzdbIds = new string[count];
            for (int i = 0; i < count; i++)
            {
                tzdbIds[i] = reader.ReadString();
            }
            return(new MapZone(windowsId, territory, new ReadOnlyCollection <string>(tzdbIds)));
        }
        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));
        }
        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));
        }
        internal static WindowsZones Read(IDateTimeZoneReader reader)
        {
            string version        = reader.ReadString();
            string tzdbVersion    = reader.ReadString();
            string windowsVersion = reader.ReadString();
            int    count          = reader.ReadCount();
            var    mapZones       = new MapZone[count];

            for (int i = 0; i < count; i++)
            {
                mapZones[i] = MapZone.Read(reader);
            }
            return(new WindowsZones(version, tzdbVersion, windowsVersion,
                                    new ReadOnlyCollection <MapZone>(mapZones)));
        }
        /// <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));
        }
Exemple #9
0
        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));
        }
        /// <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));
        }
Exemple #11
0
        internal static TzdbZoneLocation Read(IDateTimeZoneReader reader)
        {
            int    latitudeSeconds  = reader.ReadSignedCount();
            int    longitudeSeconds = reader.ReadSignedCount();
            string countryName      = reader.ReadString();
            string countryCode      = reader.ReadString();
            string zoneId           = reader.ReadString();
            string comment          = reader.ReadString();

            // We could duplicate the validation, but there's no good reason to. It's odd
            // to catch ArgumentException, but we're in pretty tight control of what's going on here.
            try
            {
                return(new TzdbZoneLocation(latitudeSeconds, longitudeSeconds, countryName, countryCode, zoneId, comment));
            }
            catch (ArgumentException e)
            {
                throw new InvalidNodaDataException("Invalid zone location data in stream", e);
            }
        }
Exemple #12
0
        /// <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));
        }
Exemple #13
0
 /// <summary>
 /// Reads a mapping from a reader.
 /// </summary>
 internal static MapZone Read(IDateTimeZoneReader reader)
 {
     string windowsId = reader.ReadString();
     string territory = reader.ReadString();
     int count = reader.ReadCount();
     string[] tzdbIds = new string[count];
     for (int i = 0; i < count; i++)
     {
         tzdbIds[i] = reader.ReadString();
     }
     return new MapZone(windowsId, territory, new ReadOnlyCollection<string>(tzdbIds));
 }
Exemple #14
0
 internal static WindowsZones Read(IDateTimeZoneReader reader)
 {
     string version = reader.ReadString();
     string tzdbVersion = reader.ReadString();
     string windowsVersion = reader.ReadString();
     int count = reader.ReadCount();
     var mapZones = new MapZone[count];
     for (int i = 0; i < count; i++)
     {
         mapZones[i] = MapZone.Read(reader);
     }
     return new WindowsZones(version, tzdbVersion, windowsVersion, 
         new ReadOnlyCollection<MapZone>(mapZones));
 }
 internal static TzdbZoneLocation Read(IDateTimeZoneReader reader)
 {
     int latitudeSeconds = reader.ReadSignedCount();
     int longitudeSeconds = reader.ReadSignedCount();
     string countryName = reader.ReadString();
     string countryCode = reader.ReadString();
     string zoneId = reader.ReadString();
     string comment = reader.ReadString();
     // We could duplicate the validation, but there's no good reason to. It's odd
     // to catch ArgumentException, but we're in pretty tight control of what's going on here.
     try
     {
         return new TzdbZoneLocation(latitudeSeconds, longitudeSeconds, countryName, countryCode, zoneId, comment);
     }
     catch (ArgumentException e)
     {
         throw new InvalidNodaDataException("Invalid zone location data in stream", e);
     }
 }