public List <GPTimeZone> getTimeZones()
        {
            if (tzonesList == null)
            {
                tzonesList = new List <GPTimeZone>();
                XmlNode    node = getMainNode();
                XmlElement elem = node as XmlElement;
                foreach (XmlElement item in elem.ChildNodes)
                {
                    if (item.Name == "timezone")
                    {
                        GPTimeZone tzone = new GPTimeZone();
                        tzone.Id = LastId++;
                        foreach (XmlElement subs in item.ChildNodes)
                        {
                            if (subs.Name == "name")
                            {
                                tzone.Name = subs.InnerText;
                            }
                            else if (subs.Name == "transition")
                            {
                                GPTimeZone.Transition trans = new GPTimeZone.Transition();
                                if (subs.HasAttribute("date"))
                                {
                                    trans.setDateString(subs.GetAttribute("date"));
                                }
                                if (subs.HasAttribute("offset"))
                                {
                                    int.TryParse(subs.GetAttribute("offset"), out trans.OffsetInSeconds);
                                }
                                if (subs.HasAttribute("abbr"))
                                {
                                    trans.Abbreviation = subs.GetAttribute("abbr");
                                }
                                if (subs.HasAttribute("dst"))
                                {
                                    int dst = 0;
                                    int.TryParse(subs.GetAttribute("dst"), out dst);
                                    trans.Dst = ((dst == 1) ? true : false);
                                    if (trans.Dst == false && tzone.OffsetSeconds == 0)
                                    {
                                        tzone.OffsetSeconds = trans.OffsetInSeconds;
                                    }
                                }
                                tzone.Transitions.Add(trans);
                            }
                        }
                        tzone.RefreshEnds();
                        if (tzone.Name.Length > 0)
                        {
                            tzonesList.Add(tzone);
                        }
                    }
                }
            }


            return(tzonesList);
        }
Example #2
0
        public List <GPTimeZone> getTimeZones()
        {
            if (tzonesList == null)
            {
                tzonesList = new List <GPTimeZone>();
                XmlNode    node = getMainNode();
                XmlElement elem = node as XmlElement;
                string     s1;
                foreach (XmlElement item in elem.ChildNodes)
                {
                    if (item.Name == "timezone")
                    {
                        GPTimeZone tzone = new GPTimeZone();

                        if (item.HasAttribute("normalAbbr"))
                        {
                            tzone.NormalAbbr = item.GetAttribute("normalAbbr");
                        }
                        if (item.HasAttribute("dstAbbr"))
                        {
                            tzone.DstAbbr = item.GetAttribute("dstAbbr");
                        }
                        if (item.HasAttribute("offset"))
                        {
                            s1 = item.GetAttribute("offset");
                            tzone.OffsetSeconds = 0;
                            int.TryParse(s1, out tzone.OffsetSeconds);
                            tzone.OffsetSeconds *= 60;
                        }
                        if (item.HasAttribute("dst"))
                        {
                            tzone.DstUsed = item.GetAttribute("dst").Equals("True");
                        }

                        tzone.Id = getNextId();
                        foreach (XmlElement subs in item.ChildNodes)
                        {
                            if (subs.Name == "name")
                            {
                                tzone.Name = subs.InnerText;
                            }
                            else if (subs.Name == "transition")
                            {
                                GPTimeZone.Transition trans = new GPTimeZone.Transition();
                                if (subs.HasAttribute("date"))
                                {
                                    trans.startDate = GPTimeZone.Transition.recognizeDateTime(subs.GetAttribute("date"));
                                }
                                if (subs.HasAttribute("datend"))
                                {
                                    trans.endDate = GPTimeZone.Transition.recognizeDateTime(subs.GetAttribute("datend"));
                                }
                                if (subs.HasAttribute("offset"))
                                {
                                    int.TryParse(subs.GetAttribute("offset"), out trans.OffsetInSeconds);
                                    trans.OffsetInSeconds *= 60;
                                }
                                tzone.Transitions.Add(trans);
                            }
                            else if (subs.Name.Equals("rule"))
                            {
                                GPTimeZone.Rule rule = new GPTimeZone.Rule();
                                if (subs.HasAttribute("ruleStart"))
                                {
                                    rule.startDay = GPTimeZone.Rule.recognizeDaySpec(subs.GetAttribute("ruleStart"));
                                }
                                if (subs.HasAttribute("ruleEnd"))
                                {
                                    rule.endDay = GPTimeZone.Rule.recognizeDaySpec(subs.GetAttribute("ruleEnd"));
                                }
                                if (subs.HasAttribute("yearStart"))
                                {
                                    int.TryParse(subs.GetAttribute("yearStart"), out rule.startYear);
                                }
                                if (subs.HasAttribute("yearEnd"))
                                {
                                    int.TryParse(subs.GetAttribute("yearEnd"), out rule.endYear);
                                }
                                if (subs.HasAttribute("offset"))
                                {
                                    int.TryParse(subs.GetAttribute("offset"), out rule.OffsetSeconds);
                                    rule.OffsetSeconds *= 60;
                                }
                                tzone.Rules.Add(rule);
                            }
                        }
//                        tzone.RefreshEnds();
                        if (tzone.Name.Length > 0)
                        {
                            tzonesList.Add(tzone);
                        }
                    }
                }
            }


            return(tzonesList);
        }