|
@@ -36,7 +36,7 @@ using System.Text;
|
|
|
|
|
|
namespace Google.Protobuf.WellKnownTypes
|
|
|
{
|
|
|
- public partial class Timestamp : ICustomDiagnosticMessage
|
|
|
+ public partial class Timestamp : ICustomDiagnosticMessage, IComparable<Timestamp>
|
|
|
{
|
|
|
private static readonly DateTime UnixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
|
|
// Constants determined programmatically, but then hard-coded so they can be constant expressions.
|
|
@@ -222,6 +222,109 @@ namespace Google.Protobuf.WellKnownTypes
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// Given another timestamp, returns 0 if the timestamps are equivalent, -1 if this timestamp precedes the other, and 1 otherwise
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="other">Timestamp to compare</param>
|
|
|
+ /// <returns>an integer indicating whether this timestamp precedes or follows the other</returns>
|
|
|
+ public int CompareTo(Timestamp other)
|
|
|
+ {
|
|
|
+ return other == null ? 1
|
|
|
+ : Seconds < other.Seconds ? -1
|
|
|
+ : Seconds > other.Seconds ? 1
|
|
|
+ : Nanos < other.Nanos ? -1
|
|
|
+ : Nanos > other.Nanos ? 1
|
|
|
+ : 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Compares two timestamps and returns whether the first is less than (chronologically precedes) the second
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="a"></param>
|
|
|
+ /// <param name="b"></param>
|
|
|
+ /// <returns>true if a precedes b</returns>
|
|
|
+ public static bool operator <(Timestamp a, Timestamp b)
|
|
|
+ {
|
|
|
+ return a.CompareTo(b) < 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Compares two timestamps and returns whether the first is greater than (chronologically follows) the second
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="a"></param>
|
|
|
+ /// <param name="b"></param>
|
|
|
+ /// <returns>true if a follows b</returns>
|
|
|
+ public static bool operator >(Timestamp a, Timestamp b)
|
|
|
+ {
|
|
|
+ return a.CompareTo(b) > 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Compares two timestamps and returns whether the first is less than (chronologically precedes) the second
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="a"></param>
|
|
|
+ /// <param name="b"></param>
|
|
|
+ /// <returns>true if a precedes b</returns>
|
|
|
+ public static bool operator <=(Timestamp a, Timestamp b)
|
|
|
+ {
|
|
|
+ return a.CompareTo(b) <= 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Compares two timestamps and returns whether the first is greater than (chronologically follows) the second
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="a"></param>
|
|
|
+ /// <param name="b"></param>
|
|
|
+ /// <returns>true if a follows b</returns>
|
|
|
+ public static bool operator >=(Timestamp a, Timestamp b)
|
|
|
+ {
|
|
|
+ return a.CompareTo(b) >= 0;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Returns whether two timestamps are equivalent
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="a"></param>
|
|
|
+ /// <param name="b"></param>
|
|
|
+ /// <returns>true if the two timestamps refer to the same nanosecond</returns>
|
|
|
+ public static bool operator ==(Timestamp a, Timestamp b)
|
|
|
+ {
|
|
|
+ return ReferenceEquals(a, b) || (a is null ? (b is null ? true : false) : a.Equals(b));
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Returns whether two timestamps differ
|
|
|
+ /// </summary>
|
|
|
+ /// <remarks>
|
|
|
+ /// Make sure the timestamps are normalized. Comparing non-normalized timestamps is not specified and may give unexpected results.
|
|
|
+ /// </remarks>
|
|
|
+ /// <param name="a"></param>
|
|
|
+ /// <param name="b"></param>
|
|
|
+ /// <returns>true if the two timestamps differ</returns>
|
|
|
+ public static bool operator !=(Timestamp a, Timestamp b)
|
|
|
+ {
|
|
|
+ return !(a == b);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// Returns a string representation of this <see cref="Timestamp"/> for diagnostic purposes.
|
|
|
/// </summary>
|