Example #1
0
        /// <summary>
        /// Specify a time in the given time zone
        /// </summary>
        /// <param name='year'>
        /// Year.
        /// </param>
        /// <param name='month'>
        /// Month.
        /// </param>
        /// <param name='day'>
        /// Day.
        /// </param>
        /// <param name='hr'>
        /// Hr.
        /// </param>
        /// <param name='mins'>
        /// Mins.
        /// </param>
        /// <param name='secs'>
        /// Secs.
        /// </param>
        /// <param name='ms'>
        /// Ms.
        /// </param>
        /// <param name='zone'>
        /// Zone.
        /// </param>
        public ZDateTime(int year, int month, int day, int hr, int mins, int secs, int ms, ZTimeZone zone)
        {
            DateTime baseutc = new DateTime(year, month, Math.Max(day, 1), hr, mins, secs, ms, DateTimeKind.Utc);
            DateTime utc     = (baseutc - zone.BaseUtcOffset);

            var dst = zone.GetDSTInfoFor(utc);

            if (zone.IsDaylightSavingTime(utc))
            {
                _utc = (utc.Ticks - 621355968000000000L) / 10000L - dst.Offset;
            }
            else
            {
                _utc = (utc.Ticks - 621355968000000000L) / 10000L;
            }

            _zone  = zone;
            _parts =
                ((ulong)year << 36) | ((ulong)month << 32) | ((ulong)day << 27) |
                ((ulong)hr << 22) | ((ulong)mins << 16) | ((ulong)secs << 10) | (ulong)ms;
        }