private static DateTimeStruct parseTime(NodeValue nv) { String lex = nv.asNode().getLiteralLexicalForm() ; if ( nv.isDateTime() ) return DateTimeStruct.parseDateTime(lex) ; else if ( nv.isTime() ) return DateTimeStruct.parseTime(lex) ; else throw new ExprEvalException("Not a datatype for time") ; }
public boolean hasDateTime() { return isDateTime() || isDate() || isTime() || isGYear() || isGYearMonth() || isGMonth() || isGMonthDay() || isGDay() ; } public boolean isDateTime() { return false ; }
return null; if(!nv1.isDateTime() && !nv1.isDate() && !nv1.isTime()) throw new ExprEvalException("Not a valid date, datetime or time:"+nv1); if(nv1.isDateTime()) return NodeValue.makeDateTime(calValue); else if(nv1.isTime()) return NodeValue.makeNode(calValue.toXMLFormat(),XSDDatatype.XSDtime); else if(nv1.isDateTime()) return NodeValue.makeDateTime(calValue); else if(nv1.isTime()) return NodeValue.makeNode(calValue.toXMLFormat(),XSDDatatype.XSDtime); else
public static NodeValue dtDateTime(NodeValue nv1, NodeValue nv2) { if ( ! nv1.isDate() ) throw new ExprEvalException("fn:dateTime: arg1: Not an xsd:date: "+nv1) ; if ( ! nv2.isTime() ) throw new ExprEvalException("fn:dateTime: arg2: Not an xsd:time: "+nv2) ; String lex1 = nv1.asNode().getLiteralLexicalForm() ; String lex2 = nv2.asNode().getLiteralLexicalForm() ; DateTimeStruct dts1 = DateTimeStruct.parseDate(lex1); DateTimeStruct dts2 = DateTimeStruct.parseTime(lex2); if ( dts1.hasTimezone() && dts2.hasTimezone() ) { if ( ! Objects.equals(dts1.timezone, dts2.timezone) ) throw new ExprEvalException("fn:dateTime: Two different timezones: ("+nv1+", "+nv2+")"); } // Merge the date into the time. There are zero or one timezones, or two the same by this point. dts2.year = dts1.year; dts2.month = dts1.month; dts2.day = dts1.day; dts2.timezone = ( dts1.timezone != null ) ? dts1.timezone : dts2.timezone; String lex = dts2.toString(); return NodeValue.makeDateTime(lex); }
if ( nv.isTime() ) return nv ; if ( !nv.isDateTime() )
private static ValueSpaceClassification classifyValueSpace(NodeValue nv) { if ( nv.isNumber() ) return VSPACE_NUM ; if ( nv.isDateTime() ) return VSPACE_DATETIME ; if ( nv.isString()) return VSPACE_STRING ; if ( nv.isBoolean()) return VSPACE_BOOLEAN ; if ( ! nv.isLiteral() ) return VSPACE_NODE ; if ( ! SystemARQ.ValueExtensions ) return VSPACE_UNKNOWN ; // Datatypes and their value spaces that are an extension of strict SPARQL. if ( nv.isDate() ) return VSPACE_DATE ; if ( nv.isTime() ) return VSPACE_TIME ; if ( nv.isDuration() ) return VSPACE_DURATION ; if ( nv.isGYear() ) return VSPACE_G_YEAR ; if ( nv.isGYearMonth() ) return VSPACE_G_YEARMONTH ; if ( nv.isGMonth() ) return VSPACE_G_MONTH ; if ( nv.isGMonthDay() ) return VSPACE_G_MONTHDAY ; if ( nv.isGDay() ) return VSPACE_G_DAY ; if ( nv.isSortKey() ) return VSPACE_SORTKEY ; // Already a literal by this point. if ( NodeUtils.hasLang(nv.asNode()) ) return VSPACE_LANG ; return VSPACE_UNKNOWN ; }
private static DateTimeStruct parseAnyDT(NodeValue nv) { String lex = nv.asNode().getLiteralLexicalForm() ; if ( nv.isDateTime() ) return DateTimeStruct.parseDateTime(lex) ; if ( nv.isDate() ) return DateTimeStruct.parseDate(lex) ; if ( nv.isGYear() ) return DateTimeStruct.parseGYear(lex) ; if ( nv.isGYearMonth() ) return DateTimeStruct.parseGYearMonth(lex) ; if ( nv.isGMonth() ) return DateTimeStruct.parseGMonth(lex) ; if ( nv.isGMonthDay() ) return DateTimeStruct.parseGMonthDay(lex) ; if ( nv.isGDay() ) return DateTimeStruct.parseGDay(lex) ; if ( nv.isTime() ) return DateTimeStruct.parseTime(lex) ; return null ; }