/// <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; }