예제 #1
0
        public override bool Equals(object obj)
        {
            TimeOffsets other = obj as TimeOffsets;

            if (other == null)
            {
                return(false);
            }
            return(EqualsInternal(other));
        }
예제 #2
0
        bool IEquatable <ITimeOffsets> .Equals(ITimeOffsets obj)
        {
            TimeOffsets other = obj as TimeOffsets;

            if (other == null)
            {
                return(false);
            }
            return(EqualsInternal(other));
        }
예제 #3
0
        public static bool TryParse(string str, out ITimeOffsets value)
        {
            value = null;
            if (str == null)
            {
                return(false);
            }
            var  entries   = new List <Entry>();
            bool firstPart = true;

            foreach (var part in str.Split(','))
            {
                var entry = new Entry();
                if (firstPart)
                {
                    firstPart = false;
                    if (!TimeSpan.TryParseExact(part, "c", null, out entry.offset))
                    {
                        return(false);
                    }
                    entry.at = DateTime.MinValue;
                }
                else
                {
                    var components = part.Split('=');
                    if (components.Length != 2)
                    {
                        return(false);
                    }
                    if (!TimeSpan.TryParseExact(components[1], "c", null, out entry.offset))
                    {
                        return(false);
                    }
                    entry.at = MessageTimestamp.ParseFromLoselessFormat(components[0]).ToUnspecifiedTime();
                }
                entries.Add(entry);
            }
            if (entries.Count == 0)
            {
                return(false);
            }
            entries.Sort((e1, e2) => Math.Sign(e2.at.Ticks - e1.at.Ticks));
            value = new TimeOffsets(entries);
            return(true);
        }
예제 #4
0
            ITimeOffsets ITimeOffsetsBuilder.ToTimeOffsets()
            {
                if (result != null)
                {
                    return(result);
                }

                if (!baseOffsetSet)
                {
                    entries.Add(new Entry()
                    {
                        at = DateTime.MinValue
                    });
                }
                entries.Sort((e1, e2) => Math.Sign(e2.at.Ticks - e1.at.Ticks));
                for (int i = entries.Count - 2; i >= 0; --i)
                {
                    entries[i].offset += entries[i + 1].offset;
                }

                result = new TimeOffsets(entries);

                return(result);
            }
예제 #5
0
 bool EqualsInternal(TimeOffsets other)
 {
     return(entries.SequenceEqual(other.entries, Entry.comparer));
 }