Ejemplo n.º 1
0
        /// <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");
            }
        }