/// <summary> /// Compares two Dates for Date ordering /// </summary> /// <param name="x">Node</param> /// <param name="y">Node</param> /// <returns></returns> protected int DateCompare(INode x, INode y) { if (x == null || y == null) { throw new RdfQueryException("Cannot evaluate date equality when one or both arguments are Null"); } try { ILiteralNode a = (ILiteralNode)x; ILiteralNode b = (ILiteralNode)y; DateTimeOffset c = SparqlSpecsHelper.ToDateTimeOffset(a); DateTimeOffset d = SparqlSpecsHelper.ToDateTimeOffset(b); if (!c.Offset.Equals(d.Offset)) { throw new RdfQueryException("Cannot order Dates which are from different time zones"); } int res = c.Year.CompareTo(d.Year); if (res == 0) { res = c.Month.CompareTo(d.Month); if (res == 0) { res = c.Day.CompareTo(d.Day); } } return(res); } catch (FormatException) { throw new RdfQueryException("Cannot evaluate date equality since one of the arguments does not have a valid lexical value for a Date"); } }