using System; using System.Collections; using System.Globalization; using System.Runtime.CompilerServices; using System.Runtime.Serialization; namespace System { // Token: 0x020006B2 RID: 1714 [Serializable] internal class CurrentSystemTimeZone : TimeZone, IDeserializationCallback { // Token: 0x060040EC RID: 16620 RVA: 0x000DD114 File Offset: 0x000DB314 internal CurrentSystemTimeZone() { } // Token: 0x060040ED RID: 16621 RVA: 0x000DD128 File Offset: 0x000DB328 internal CurrentSystemTimeZone(long lnow) { DateTime dateTime = new DateTime(lnow); long[] array; string[] array2; if (!CurrentSystemTimeZone.GetTimeZoneData(dateTime.Year, out array, out array2)) { throw new NotSupportedException(Locale.GetText("Can't get timezone name.")); } this.m_standardName = Locale.GetText(array2[0]); this.m_daylightName = Locale.GetText(array2[1]); this.m_ticksOffset = array[2]; DaylightTime daylightTimeFromData = this.GetDaylightTimeFromData(array); this.m_CachedDaylightChanges.Add(dateTime.Year, daylightTimeFromData); this.OnDeserialization(daylightTimeFromData); } // Token: 0x060040EE RID: 16622 RVA: 0x000DD1C0 File Offset: 0x000DB3C0 void IDeserializationCallback.OnDeserialization(object sender) { this.OnDeserialization(null); } // Token: 0x060040EF RID: 16623 [MethodImpl(MethodImplOptions.InternalCall)] private static extern bool GetTimeZoneData(int year, out long[] data, out string[] names); // Token: 0x17000BFD RID: 3069 // (get) Token: 0x060040F0 RID: 16624 RVA: 0x000DD1CC File Offset: 0x000DB3CC public override string DaylightName { get { return this.m_daylightName; } } // Token: 0x17000BFE RID: 3070 // (get) Token: 0x060040F1 RID: 16625 RVA: 0x000DD1D4 File Offset: 0x000DB3D4 public override string StandardName { get { return this.m_standardName; } } // Token: 0x060040F2 RID: 16626 RVA: 0x000DD1DC File Offset: 0x000DB3DC public override DaylightTime GetDaylightChanges(int year) { if (year < 1 || year > 9999) { throw new ArgumentOutOfRangeException("year", year + Locale.GetText(" is not in a range between 1 and 9999.")); } if (year == CurrentSystemTimeZone.this_year) { return CurrentSystemTimeZone.this_year_dlt; } Hashtable cachedDaylightChanges = this.m_CachedDaylightChanges; DaylightTime daylightTime2; lock (cachedDaylightChanges) { DaylightTime daylightTime = (DaylightTime)this.m_CachedDaylightChanges[year]; if (daylightTime == null) { long[] array; string[] array2; if (!CurrentSystemTimeZone.GetTimeZoneData(year, out array, out array2)) { throw new ArgumentException(Locale.GetText("Can't get timezone data for " + year)); } daylightTime = this.GetDaylightTimeFromData(array); this.m_CachedDaylightChanges.Add(year, daylightTime); } daylightTime2 = daylightTime; } return daylightTime2; } // Token: 0x060040F3 RID: 16627 RVA: 0x000DD2CC File Offset: 0x000DB4CC public override TimeSpan GetUtcOffset(DateTime time) { if (this.IsDaylightSavingTime(time)) { return this.utcOffsetWithDLS; } return this.utcOffsetWithOutDLS; } // Token: 0x060040F4 RID: 16628 RVA: 0x000DD2E8 File Offset: 0x000DB4E8 private void OnDeserialization(DaylightTime dlt) { if (dlt == null) { CurrentSystemTimeZone.this_year = DateTime.Now.Year; long[] array; string[] array2; if (!CurrentSystemTimeZone.GetTimeZoneData(CurrentSystemTimeZone.this_year, out array, out array2)) { throw new ArgumentException(Locale.GetText("Can't get timezone data for " + CurrentSystemTimeZone.this_year)); } dlt = this.GetDaylightTimeFromData(array); } else { CurrentSystemTimeZone.this_year = dlt.Start.Year; } this.utcOffsetWithOutDLS = new TimeSpan(this.m_ticksOffset); this.utcOffsetWithDLS = new TimeSpan(this.m_ticksOffset + dlt.Delta.Ticks); CurrentSystemTimeZone.this_year_dlt = dlt; } // Token: 0x060040F5 RID: 16629 RVA: 0x000DD398 File Offset: 0x000DB598 private DaylightTime GetDaylightTimeFromData(long[] data) { return new DaylightTime(new DateTime(data[0]), new DateTime(data[1]), new TimeSpan(data[3])); } // Token: 0x040019F2 RID: 6642 private string m_standardName; // Token: 0x040019F3 RID: 6643 private string m_daylightName; // Token: 0x040019F4 RID: 6644 private Hashtable m_CachedDaylightChanges = new Hashtable(1); // Token: 0x040019F5 RID: 6645 private long m_ticksOffset; // Token: 0x040019F6 RID: 6646 [NonSerialized] private TimeSpan utcOffsetWithOutDLS; // Token: 0x040019F7 RID: 6647 [NonSerialized] private TimeSpan utcOffsetWithDLS; // Token: 0x040019F8 RID: 6648 private static int this_year; // Token: 0x040019F9 RID: 6649 private static DaylightTime this_year_dlt; // Token: 0x020006B3 RID: 1715 internal enum TimeZoneData { // Token: 0x040019FB RID: 6651 DaylightSavingStartIdx, // Token: 0x040019FC RID: 6652 DaylightSavingEndIdx, // Token: 0x040019FD RID: 6653 UtcOffsetIdx, // Token: 0x040019FE RID: 6654 AdditionalDaylightOffsetIdx } // Token: 0x020006B4 RID: 1716 internal enum TimeZoneNames { // Token: 0x04001A00 RID: 6656 StandardNameIdx, // Token: 0x04001A01 RID: 6657 DaylightNameIdx } } }