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(){

Reply via email to