예제 #1
0
        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());
        }
예제 #2
0
        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);
        }
예제 #3
0
            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);
                    }
                }
            }