diff --git a/pom.xml b/pom.xml
index 67f2ee014..1e6ebc86d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,7 +89,7 @@
 		
 			junit
 			junit
-			4.4
+			4.13.2
 			provided
 		
 		
diff --git a/src/main/java/io/mycat/route/function/PartitionByRangeDateHash.java b/src/main/java/io/mycat/route/function/PartitionByRangeDateHash.java
index 62f456918..f43be9872 100644
--- a/src/main/java/io/mycat/route/function/PartitionByRangeDateHash.java
+++ b/src/main/java/io/mycat/route/function/PartitionByRangeDateHash.java
@@ -9,6 +9,8 @@
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 
+import java.util.TimeZone;
+
 /**
  * 先根据日期分组,再根据时间hash使得短期内数据分布的更均匀
  * 优点可以避免扩容时的数据迁移,又可以一定程度上避免范围分片的热点问题
@@ -29,6 +31,7 @@ public class PartitionByRangeDateHash extends AbstractPartitionAlgorithm impleme
     private long partionTime;
 
     private static final long oneDay = 86400000;
+    private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
 
     private String groupPartionSize;
     private int intGroupPartionSize;
@@ -40,13 +43,16 @@ public void init()
     {
         try
         {
-            beginDate = new SimpleDateFormat(dateFormat).parse(sBeginDate)
-                    .getTime();
+            SimpleDateFormat sdfInit = new SimpleDateFormat(dateFormat);
+            sdfInit.setTimeZone(UTC);
+            beginDate = sdfInit.parse(sBeginDate).getTime();
             intGroupPartionSize = Integer.parseInt(groupPartionSize);
             formatter = new ThreadLocal() {
                 @Override
                 protected SimpleDateFormat initialValue() {
-                    return new SimpleDateFormat(dateFormat);
+                    SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
+                    sdf.setTimeZone(UTC); 
+                    return sdf;
                 }
             };
             if (intGroupPartionSize <= 0)
@@ -80,8 +86,7 @@ public Integer calculateStart(String columnValue)
     {
         try
         {
-            long targetTime = new SimpleDateFormat(dateFormat).parse(
-                    columnValue).getTime();
+            long targetTime = formatter.get().parse(columnValue).getTime();
             int targetPartition = (int) ((targetTime - beginDate) / partionTime);
             return targetPartition * intGroupPartionSize;
 
@@ -96,8 +101,7 @@ public Integer calculateEnd(String columnValue)
     {
         try
         {
-            long targetTime = new SimpleDateFormat(dateFormat).parse(
-                    columnValue).getTime();
+            long targetTime = formatter.get().parse(columnValue).getTime();
             int targetPartition = (int) ((targetTime - beginDate) / partionTime);
             return (targetPartition+1) * intGroupPartionSize  - 1;
 
diff --git a/src/test/java/io/mycat/route/function/PartitionByRangeDateHashTest.java b/src/test/java/io/mycat/route/function/PartitionByRangeDateHashTest.java
index 30ee5cee6..8dbacd84c 100644
--- a/src/test/java/io/mycat/route/function/PartitionByRangeDateHashTest.java
+++ b/src/test/java/io/mycat/route/function/PartitionByRangeDateHashTest.java
@@ -39,16 +39,16 @@ public void test() throws ParseException {
         partition.init();
 
         Integer calculate = partition.calculate("2014-01-01 00:00:00");
-        Assert.assertEquals(true, 3 == calculate);
+        Assert.assertEquals(true, 1 == calculate);
 
          calculate = partition.calculate("2014-01-01 00:00:01");
-        Assert.assertEquals(true, 1 == calculate);
+        Assert.assertEquals(true, 0 == calculate);
 
         calculate = partition.calculate("2014-01-04 00:00:00");
-        Assert.assertEquals(true, 7 == calculate);
+        Assert.assertEquals(true, 6 == calculate);
 
         calculate = partition.calculate("2014-01-04 00:00:01");
-        Assert.assertEquals(true, 11== calculate);
+        Assert.assertEquals(true, 10 == calculate);
 
 
         Date beginDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2014-01-01 00:00:00");