This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch rc/1.3.1 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6c185be5b3aa5f508fd5ab2ead0953d204efe809 Author: Haonan <[email protected]> AuthorDate: Mon Feb 26 18:50:40 2024 +0800 [IOTDB-6302] Enhance the support of ISO_LOCAL_DATE_TIME timestamp format (#12086) --- .../org/apache/iotdb/db/utils/DateTimeUtils.java | 11 ++---- .../apache/iotdb/db/utils/DateTimeUtilsTest.java | 41 ++++++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java index 983fc48aae5..56521b3e434 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/DateTimeUtils.java @@ -97,9 +97,7 @@ public class DateTimeUtils { .appendLiteral(':') .appendValue(ChronoField.SECOND_OF_MINUTE, 2) .optionalStart() - .appendLiteral('.') - .appendValue(ChronoField.MILLI_OF_SECOND, 3) - .optionalEnd() + .appendFraction(ChronoField.MILLI_OF_SECOND, 0, 3, true) .toFormatter(); } @@ -115,9 +113,7 @@ public class DateTimeUtils { .appendLiteral(':') .appendValue(ChronoField.SECOND_OF_MINUTE, 2) .optionalStart() - .appendLiteral('.') - .appendValue(ChronoField.MICRO_OF_SECOND, 6) - .optionalEnd() + .appendFraction(ChronoField.MICRO_OF_SECOND, 0, 6, true) .toFormatter(); } @@ -133,8 +129,7 @@ public class DateTimeUtils { .appendLiteral(':') .appendValue(ChronoField.SECOND_OF_MINUTE, 2) .optionalStart() - .appendLiteral('.') - .appendValue(ChronoField.NANO_OF_SECOND, 9) + .appendFraction(ChronoField.NANO_OF_SECOND, 0, 9, true) .optionalEnd() .toFormatter(); } diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java index a7ed50c287a..8df917e6fca 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/DateTimeUtilsTest.java @@ -50,6 +50,7 @@ public class DateTimeUtilsTest { } testConvertDatetimeStrToLongWithoutMS(zoneOffset, zoneId, timestamp - 689 + delta); testConvertDatetimeStrToLongWithMS(zoneOffset, zoneId, timestamp + delta); + testConvertDatetimeStrToLongWithMS2(zoneOffset, zoneId, timestamp - 9 + delta); } @Test @@ -59,6 +60,7 @@ public class DateTimeUtilsTest { delta = 8 * 3600000; testConvertDatetimeStrToLongWithoutMS(zoneOffset, zoneId, timestamp - 689 + delta); testConvertDatetimeStrToLongWithMS(zoneOffset, zoneId, timestamp + delta); + testConvertDatetimeStrToLongWithMS2(zoneOffset, zoneId, timestamp - 9 + delta); } @Test @@ -222,6 +224,45 @@ public class DateTimeUtilsTest { } } + public void testConvertDatetimeStrToLongWithMS2(ZoneOffset zoneOffset, ZoneId zoneId, long res) { + String[] timeFormatWithoutMs = + new String[] { + "2019-01-02 15:13:27.680", + "2019/01/02 15:13:27.680", + "2019.01.02 15:13:27.680", + "2019-01-02T15:13:27.680", + "2019-01-02T15:13:27.680", + "2019/01/02T15:13:27.680", + "2019.01.02T15:13:27.680", + "2019-01-02 15:13:27.680" + zoneOffset, + "2019/01/02 15:13:27.680" + zoneOffset, + "2019.01.02 15:13:27.680" + zoneOffset, + "2019-01-02T15:13:27.680" + zoneOffset, + "2019/01/02T15:13:27.680" + zoneOffset, + "2019.01.02T15:13:27.680" + zoneOffset, + "2019-01-02 15:13:27.68", + "2019/01/02 15:13:27.68", + "2019.01.02 15:13:27.68", + "2019-01-02T15:13:27.68", + "2019-01-02T15:13:27.68", + "2019/01/02T15:13:27.68", + "2019.01.02T15:13:27.68", + "2019-01-02 15:13:27.68" + zoneOffset, + "2019/01/02 15:13:27.68" + zoneOffset, + "2019.01.02 15:13:27.68" + zoneOffset, + "2019-01-02T15:13:27.68" + zoneOffset, + "2019/01/02T15:13:27.68" + zoneOffset, + "2019.01.02T15:13:27.68" + zoneOffset, + }; + for (String str : timeFormatWithoutMs) { + assertEquals(res, DateTimeUtils.convertDatetimeStrToLong(str, zoneOffset, 0, "ms")); + } + + for (String str : timeFormatWithoutMs) { + assertEquals(res, DateTimeUtils.convertDatetimeStrToLong(str, zoneId)); + } + } + public void testConvertDateStrToLong(ZoneOffset zoneOffset, ZoneId zoneId, long res) { String[] timeFormatWithoutMs = new String[] {
