This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch new_date_format in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
commit 9e9e9b1f4156db690a741c7b8ed19e1d9f3d1603 Author: HTHou <[email protected]> AuthorDate: Wed Mar 4 00:06:04 2020 +0800 Support date format 2020-02-10 --- .../org/apache/iotdb/db/qp/strategy/SqlBase.g4 | 4 ++-- .../apache/iotdb/db/qp/constant/DatetimeUtils.java | 2 ++ .../db/sql/DatetimeQueryDataSetUtilsTest.java | 23 ++++++++++++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 index 55943fc..acf7efc 100644 --- a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 +++ b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4 @@ -818,9 +818,9 @@ DURATION DATETIME : INT ('-'|'/') INT ('-'|'/') INT - (T | WS) + ((T | WS) INT ':' INT ':' INT (DOT INT)? - (('+' | '-') INT ':' INT)? + (('+' | '-') INT ':' INT)?)? ; /** Allow unicode rule/token names */ ID : NameChar NameChar*; diff --git a/server/src/main/java/org/apache/iotdb/db/qp/constant/DatetimeUtils.java b/server/src/main/java/org/apache/iotdb/db/qp/constant/DatetimeUtils.java index 1111125..ef06ef3 100644 --- a/server/src/main/java/org/apache/iotdb/db/qp/constant/DatetimeUtils.java +++ b/server/src/main/java/org/apache/iotdb/db/qp/constant/DatetimeUtils.java @@ -464,6 +464,8 @@ public class DatetimeUtils { if (str.contains("Z")) { return convertDatetimeStrToLong(str.substring(0, str.indexOf('Z')) + "+00:00", offset, depth); + } else if (str.length() == 10) { + return convertDatetimeStrToLong(str + "T00:00:00", offset, depth); } else if (str.length() - str.lastIndexOf('+') != 6 && str.length() - str.lastIndexOf('-') != 6) { return convertDatetimeStrToLong(str + offset, offset, depth + 1); diff --git a/server/src/test/java/org/apache/iotdb/db/sql/DatetimeQueryDataSetUtilsTest.java b/server/src/test/java/org/apache/iotdb/db/sql/DatetimeQueryDataSetUtilsTest.java index 84e2f72..c3043e3 100644 --- a/server/src/test/java/org/apache/iotdb/db/sql/DatetimeQueryDataSetUtilsTest.java +++ b/server/src/test/java/org/apache/iotdb/db/sql/DatetimeQueryDataSetUtilsTest.java @@ -37,6 +37,8 @@ public class DatetimeQueryDataSetUtilsTest { // 1546413207689 // 2019-01-02T15:13:27.689+08:00 private final long timestamp = 1546413207689L; + // 2019-01-02T00:00:00.000+08:00 + private final long timestamp1 = 1546358400000L; private long delta; @Before @@ -69,6 +71,14 @@ public class DatetimeQueryDataSetUtilsTest { testConvertDatetimeStrToLongWithMS(zoneOffset, zoneId, timestamp + delta); } + @Test + public void test3() throws LogicalOperatorException{ + zoneOffset = ZoneOffset.UTC; + zoneId = ZoneId.of("Etc/UTC"); + delta = 8 * 3600000; + testConvertDateStrToLong(zoneOffset, zoneId, timestamp1 + delta); + } + public void testConvertDatetimeStrToLongWithoutMS(ZoneOffset zoneOffset, ZoneId zoneId, long res) throws LogicalOperatorException { String[] timeFormatWithoutMs = new String[]{"2019-01-02 15:13:27", "2019/01/02 15:13:27", "2019.01.02 15:13:27", "2019-01-02T15:13:27", "2019/01/02T15:13:27", "2019.01.02T15:13:27", @@ -102,6 +112,19 @@ public class DatetimeQueryDataSetUtilsTest { } } + public void testConvertDateStrToLong(ZoneOffset zoneOffset, ZoneId zoneId, long res) throws LogicalOperatorException { + String[] timeFormatWithoutMs = new String[]{"2019-01-02", + "2019/01/02", + "2019.01.02",}; + for (String str : timeFormatWithoutMs) { + assertEquals(res, DatetimeUtils.convertDatetimeStrToLong(str, zoneOffset, 0)); + } + + for (String str : timeFormatWithoutMs) { + assertEquals(res, DatetimeUtils.convertDatetimeStrToLong(str, zoneId)); + } + } + public void createTest() { // long timestamp = System.currentTimeMillis(); // System.out.println(timestamp);
