public override bool Equals(object obj) { TimeOffsets other = obj as TimeOffsets; if (other == null) { return(false); } return(EqualsInternal(other)); }
bool IEquatable <ITimeOffsets> .Equals(ITimeOffsets obj) { TimeOffsets other = obj as TimeOffsets; if (other == null) { return(false); } return(EqualsInternal(other)); }
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); }
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); }
bool EqualsInternal(TimeOffsets other) { return(entries.SequenceEqual(other.entries, Entry.comparer)); }