You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/05/08 02:12:31 UTC

[iotdb] 01/01: [IOTDB-1313] Fix lossing time precision when import csv with unsupported timestamp format

This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch jira-1313
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 0b88726e62c51c9da0df9260e3ac5401df705228
Author: HTHou <hh...@outlook.com>
AuthorDate: Sat May 8 10:11:45 2021 +0800

    [IOTDB-1313] Fix lossing time precision when import csv with unsupported timestamp format
---
 .../org/apache/iotdb/tool/AbstractCsvTool.java     | 14 +++++++--
 .../main/java/org/apache/iotdb/tool/ExportCsv.java |  2 +-
 .../main/java/org/apache/iotdb/tool/ImportCsv.java | 34 +++++-----------------
 3 files changed, 20 insertions(+), 30 deletions(-)

diff --git a/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java b/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java
index ff8b925..de47542 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java
@@ -53,12 +53,15 @@ public abstract class AbstractCsvTool {
   protected static final String TIME_ZONE_ARGS = "tz";
   protected static final String TIME_ZONE_NAME = "timeZone";
   protected static final int MAX_HELP_CONSOLE_WIDTH = 92;
-  protected static final String[] SUPPORT_TIME_FORMAT =
+  protected static final String[] NUMBER_TIME_FORMAT =
       new String[] {
         "default",
         "long",
         "number",
-        "timestamp",
+        "timestamp"
+      };
+  protected static final String[] STRING_TIME_FORMAT =
+      new String[] {
         "yyyy-MM-dd HH:mm:ss",
         "yyyy/MM/dd HH:mm:ss",
         "yyyy.MM.dd HH:mm:ss",
@@ -129,7 +132,12 @@ public abstract class AbstractCsvTool {
   }
 
   protected static boolean checkTimeFormat() {
-    for (String format : SUPPORT_TIME_FORMAT) {
+    for (String format : NUMBER_TIME_FORMAT) {
+      if (timeFormat.equals(format)) {
+        return true;
+      }
+    }
+    for (String format : STRING_TIME_FORMAT) {
       if (timeFormat.equals(format)) {
         return true;
       }
diff --git a/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java b/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java
index ceb0142..5b1d9ca 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/ExportCsv.java
@@ -312,7 +312,7 @@ public class ExportCsv extends AbstractCsvTool {
         break;
       case "timestamp":
       case "long":
-      case "nubmer":
+      case "number":
         bw.write(time + ",");
         break;
       default:
diff --git a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
index 224d513..fdf32b3 100644
--- a/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
+++ b/cli/src/main/java/org/apache/iotdb/tool/ImportCsv.java
@@ -33,8 +33,6 @@ import org.apache.commons.cli.HelpFormatter;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -57,8 +55,6 @@ public class ImportCsv extends AbstractCsvTool {
   private static final String FILE_ARGS = "f";
   private static final String FILE_NAME = "file or folder";
   private static final String FILE_SUFFIX = "csv";
-  private static final Logger logger = LoggerFactory.getLogger(ImportCsv.class);
-  private static final String TIME_TYPE = "It isn't a {} time type";
 
   private static final String TSFILEDB_CLI_PREFIX = "ImportCsv";
   private static final String ILLEGAL_PATH_ARGUMENT = "Path parameter is null";
@@ -249,9 +245,6 @@ public class ImportCsv extends AbstractCsvTool {
   }
 
   private static SimpleDateFormat formatterInit(String time) {
-    SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
-    SimpleDateFormat format2 = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
-    SimpleDateFormat format3 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
 
     try {
       Long.parseLong(time);
@@ -260,25 +253,14 @@ public class ImportCsv extends AbstractCsvTool {
       // do nothing
     }
 
-    try {
-      format1.parse(time).getTime();
-      return format1;
-    } catch (java.text.ParseException ignored) {
-      // do nothing
-    }
-
-    try {
-      format2.parse(time).getTime();
-      return format2;
-    } catch (java.text.ParseException ignored) {
-      // do nothing
-    }
-
-    try {
-      format3.parse(time).getTime();
-      return format3;
-    } catch (java.text.ParseException ignored) {
-      // do nothing
+    for (String timeFormat : STRING_TIME_FORMAT) {
+      SimpleDateFormat format = new SimpleDateFormat(timeFormat);
+      try {
+        format.parse(time).getTime();
+        return format;
+      } catch (java.text.ParseException ignored) {
+        // do nothing
+      }
     }
     return null;
   }