Taking into account daylight savings in the timezone by using the current date value. Using newDurationDatetime instead of parsing the string value.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/51525117 Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/51525117 Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/51525117 Branch: refs/heads/master Commit: 51525117bc9a81aa5362340c5a9a005eef0be28d Parents: d57d48c Author: ales004 <[email protected]> Authored: Thu Jun 9 07:56:07 2016 +0200 Committer: ales004 <[email protected]> Committed: Thu Jun 9 07:56:07 2016 +0200 ---------------------------------------------------------------------- .../org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java | 8 +++++--- .../test/java/org/apache/jena/sparql/expr/TestFunctions.java | 7 +++++-- 2 files changed, 10 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/51525117/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java index 785817f..7b565fd 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/expr/nodevalue/XSDFuncOp.java @@ -1567,7 +1567,7 @@ public class XSDFuncOp inputOffset = calValue.getTimezone(); } - int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60); + int tzOffset = 0; if(nv2 != null){ if(!nv2.isDuration()) { String nv2StrValue = nv2.getString(); @@ -1590,8 +1590,10 @@ public class XSDFuncOp if(absTzOffset > 14*60) throw new ExprEvalException("The timezone should be a duration between -PT14H and PT14H."); } - String tzSign = (tzOffset-inputOffset) > 0 ? "" : "-"; - Duration durToAdd = NodeValue.makeDuration(tzSign+"PT"+java.lang.Math.abs(tzOffset-inputOffset)+"M").getDuration(); + else{ + tzOffset = TimeZone.getDefault().getOffset(new Date().getTime())/(1000*60); + } + Duration durToAdd = NodeValue.xmlDatatypeFactory.newDurationDayTime((tzOffset-inputOffset) > 0,0,0,java.lang.Math.abs(tzOffset-inputOffset),0); if(hasTz) calValue.add(durToAdd); calValue.setTimezone(tzOffset); http://git-wip-us.apache.org/repos/asf/jena/blob/51525117/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java index 1830c5e..e7bf8a6 100644 --- a/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java +++ b/jena-arq/src/test/java/org/apache/jena/sparql/expr/TestFunctions.java @@ -349,8 +349,11 @@ public class TestFunctions @Test public void exprRoundHalfEven_08() { test("fn:round-half-to-even('150.015'^^xsd:float, 2)", NodeValue.makeFloat((float)150.01)) ; } private String getDynamicDurationString(){ - int tzOffset = TimeZone.getDefault().getRawOffset() / (1000*60); - return "PT"+tzOffset+"M"; + int tzOffset = TimeZone.getDefault().getOffset(new Date().getTime()) / (1000*60); + String off = "PT"+Math.abs(tzOffset)+"M"; + if(tzOffset < 0) + off = "-"+off; + return off; } @Test public void exprAdjustDatetimeToTz_01(){
