This is an automated email from the ASF dual-hosted git repository. nic pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 19706b2 KYLIN-4010 Support date format "yyyy-MM-dd'T'HH:mm:ss.SSSZZ" 19706b2 is described below commit 19706b2e2aeac0e65ec467c55a8b90bb5b43ff51 Author: nichunen <n...@apache.org> AuthorDate: Mon Sep 23 22:26:02 2019 +0800 KYLIN-4010 Support date format "yyyy-MM-dd'T'HH:mm:ss.SSSZZ" --- .../org/apache/kylin/common/util/DateFormat.java | 11 ++++- .../org/apache/kylin/common/util/BasicTest.java | 55 ++++++++-------------- 2 files changed, 29 insertions(+), 37 deletions(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/util/DateFormat.java b/core-common/src/main/java/org/apache/kylin/common/util/DateFormat.java index e7a5579..fd86c62 100644 --- a/core-common/src/main/java/org/apache/kylin/common/util/DateFormat.java +++ b/core-common/src/main/java/org/apache/kylin/common/util/DateFormat.java @@ -37,11 +37,14 @@ public class DateFormat { public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; public static final String YYYYMMDDHHMM = "yyyyMMddHHmm"; public static final String YYYYMMDDHH = "yyyyMMddHH"; + public static final String ISO_8601_24H_FULL_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSSZZ"; + public static final String[] SUPPORTED_DATETIME_PATTERN = { // DEFAULT_DATE_PATTERN, // DEFAULT_DATETIME_PATTERN_WITHOUT_MILLISECONDS, // DEFAULT_DATETIME_PATTERN_WITH_MILLISECONDS, // - COMPACT_DATE_PATTERN }; + COMPACT_DATE_PATTERN, // + ISO_8601_24H_FULL_FORMAT}; static final private Map<String, FastDateFormat> formatMap = new ConcurrentHashMap<String, FastDateFormat>(); @@ -132,7 +135,11 @@ public class DateFormat { } else if (str.length() == 19) { return stringToDate(str, DEFAULT_DATETIME_PATTERN_WITHOUT_MILLISECONDS).getTime(); } else if (str.length() > 19) { - return stringToDate(str, DEFAULT_DATETIME_PATTERN_WITH_MILLISECONDS).getTime(); + if (str.contains("T")) { + return stringToDate(str, ISO_8601_24H_FULL_FORMAT).getTime(); + } else { + return stringToDate(str, DEFAULT_DATETIME_PATTERN_WITH_MILLISECONDS).getTime(); + } } else { throw new IllegalArgumentException("there is no valid date pattern for:" + str); } diff --git a/core-common/src/test/java/org/apache/kylin/common/util/BasicTest.java b/core-common/src/test/java/org/apache/kylin/common/util/BasicTest.java index e4c65fb..46f5c97 100644 --- a/core-common/src/test/java/org/apache/kylin/common/util/BasicTest.java +++ b/core-common/src/test/java/org/apache/kylin/common/util/BasicTest.java @@ -18,14 +18,11 @@ package org.apache.kylin.common.util; -import java.io.IOException; import java.nio.ByteBuffer; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -56,19 +53,13 @@ import com.google.common.collect.Maps; @SuppressWarnings("unused") public class BasicTest { protected static final org.slf4j.Logger logger = LoggerFactory.getLogger(BasicTest.class); - - private enum MetricType { - Count, DimensionAsMetric, DistinctCount, Normal - } - public static int counter = 1; - class X { - byte[] mm = new byte[100]; - - public X() { - counter++; - } + private static String time(long t) { + DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.ROOT); + Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.ROOT); + cal.setTimeInMillis(t); + return dateFormat.format(cal.getTime()); } @Test @@ -151,13 +142,14 @@ public class BasicTest { } @Test - @Ignore("convenient trial tool for dev") public void test1() throws Exception { System.out.println(org.apache.kylin.common.util.DateFormat.formatToTimeStr(1433833611000L)); System.out.println(org.apache.kylin.common.util.DateFormat.formatToTimeStr(1433250517000L)); System.out.println(org.apache.kylin.common.util.DateFormat.stringToMillis("2015-06-01 00:00:00")); System.out.println(org.apache.kylin.common.util.DateFormat.stringToMillis("2015-05-15 17:00:00")); + Assert.assertEquals(1568960682251L, + org.apache.kylin.common.util.DateFormat.stringToMillis("2019-09-20T14:24:42.251+08:00")); String bb = "\\x00\\x00\\x00\\x00\\x01\\x3F\\xD0\\x2D\\58\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00";//2013/07/12 07:59:37 String cc = "\\x00\\x00\\x00\\x00\\x01\\x41\\xBE\\x8F\\xD8\\x00\\x00\\x00\\x00\\x00\\x00\\x00";//2013/10/16 08:00:00 @@ -195,22 +187,10 @@ public class BasicTest { } @Test - @Ignore("fix it later") - public void test2() throws IOException { - ArrayList<String> x = Lists.newArrayListWithCapacity(10); - x.set(2, "dd"); - for (String y : x) { - System.out.println(y); - } - } - - @Test - @Ignore("for dev only") public void test3() throws Exception { - FastDateFormat formatter = org.apache.kylin.common.util.DateFormat.getDateFormat("MMM dd, yyyy hh:mm:ss aa"); - System.out.println(formatter.format(new Date())); + FastDateFormat formatter = org.apache.kylin.common.util.DateFormat.getDateFormat("MM dd, yyyy hh:mm:ss a"); - String timeStr = "Jul 20, 2016 9:59:17 AM"; + String timeStr = "07 20, 2016 09:59:17 AM"; System.out.println(formatter.parse(timeStr).getTime()); } @@ -218,7 +198,7 @@ public class BasicTest { @Test public void testStringSplit() throws Exception { - String[] origin = new String[] {"ab,c", "cd|e"}; + String[] origin = new String[] { "ab,c", "cd|e" }; // test with sequence file default delimiter String delimiter = "\01"; //"\u001F"; "\t"; @@ -232,10 +212,15 @@ public class BasicTest { Assert.assertEquals(origin, newValues); } - private static String time(long t) { - DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.ROOT); - Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.ROOT); - cal.setTimeInMillis(t); - return dateFormat.format(cal.getTime()); + private enum MetricType { + Count, DimensionAsMetric, DistinctCount, Normal + } + + class X { + byte[] mm = new byte[100]; + + public X() { + counter++; + } } }