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[] {

Reply via email to