private static MetaTimeZone[] GetMetaTimeZones(string filename, string elementsName, string progressName) { XDocument supplementalDocument = GetXmlDocument(String.Format(@"common\supplemental\{0}.xml", filename)); List <XElement> metaTimeZoneElements = (from i in supplementalDocument.Elements("supplementalData").Elements(elementsName) .Elements("mapTimezones").Elements("mapZone") orderby i.Attribute("other").Value.ToString() select i).ToList(); List <MetaTimeZone> metaTimeZones = new List <MetaTimeZone>(); int metaTimeZoneIndex = 0; while (metaTimeZoneIndex < metaTimeZoneElements.Count) { XElement metaTimeZoneElement = metaTimeZoneElements[metaTimeZoneIndex]; string metaTimeZoneId = metaTimeZoneElement.Attribute("other").Value.ToString(); Progress(String.Format("Adding {0}", progressName), metaTimeZoneId); MetaTimeZone metaTimeZone = new MetaTimeZone(); metaTimeZone.Id = metaTimeZoneId; List <TimeZoneRegion> timeZoneRegions = new List <TimeZoneRegion>(); while (metaTimeZoneIndex < metaTimeZoneElements.Count && metaTimeZoneElement.Attribute("other").Value.ToString() == metaTimeZoneId) { TimeZoneRegion timeZoneRegion = new TimeZoneRegion(); timeZoneRegion.RegionId = metaTimeZoneElement.Attribute("territory").Value.ToString(); timeZoneRegion.TimeZoneId = metaTimeZoneElement.Attribute("type").Value.ToString(); timeZoneRegions.Add(timeZoneRegion); metaTimeZoneIndex++; if (metaTimeZoneIndex < metaTimeZoneElements.Count) { metaTimeZoneElement = metaTimeZoneElements[metaTimeZoneIndex]; } } metaTimeZone.TimeZoneRegions = timeZoneRegions.ToArray(); metaTimeZones.Add(metaTimeZone); Progress(string.Format("Added {0}", progressName), metaTimeZoneId, ProgressEventType.Added, metaTimeZone); } return(metaTimeZones.ToArray()); }
public static DateTime GetNextDailyReset(MetaTimeZone timeZone, DateTime currentServerUTCTime) { DateTime nextUTCRefresh = new DateTime(currentServerUTCTime.Year, currentServerUTCTime.Month, currentServerUTCTime.Day, 0, 0, 0).AddDays(1); switch (timeZone) { case MetaTimeZone.UTC: case MetaTimeZone.EU: return(nextUTCRefresh); case MetaTimeZone.NA: return(nextUTCRefresh.AddHours(+4)); case MetaTimeZone.ASIA: return(nextUTCRefresh.AddHours(-8)); } return(nextUTCRefresh); }
private void LoadMapZone(string elmName, List <AttributeValue> attributes) { if (elmName != "mapZone") { return; } MetaTimeZone meta = null; Territory territory = null; TimeZoneType zone = null; foreach (AttributeValue attribute in attributes) { switch (attribute.Name) { case "other": meta = _loader.GetMetaZone(attribute.Value); break; case "territory": territory = _loader.GetTerritory(attribute.Value); break; case "type": zone = _loader._timeZoneInfoMap[attribute.Value]; break; } } if (meta != null && zone != null) { if (territory == null || territory.Code.SameName("GMT")) { meta.Default = zone; } else { meta.Add(territory, zone); } } }