Skip to content

Commit c812fe0

Browse files
authored
[Enhancement]Enhance datetime format (backport #39986) (#40505)
Signed-off-by: leoyy0316 <[email protected]>
1 parent 1de972b commit c812fe0

File tree

2 files changed

+30
-12
lines changed

2 files changed

+30
-12
lines changed

fe/fe-core/src/main/java/com/starrocks/common/util/DateUtils.java

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,23 @@ public class DateUtils {
5050
private static final DateTimeFormatter STRICT_DATE_NO_SPLIT_FORMATTER =
5151
unixDatetimeStrictFormatter("%Y%m%e", true);
5252

53-
// isTwoDigit, withMs, withSplitT -> formatter
54-
private static final DateTimeFormatter[][][] DATETIME_FORMATTERS = new DateTimeFormatter[2][2][2];
53+
// isTwoDigit, withMs, withSplitT, withSec -> formatter
54+
private static final DateTimeFormatter[][][][] DATETIME_FORMATTERS = new DateTimeFormatter[2][2][2][2];
5555

5656
static {
57-
// isTwoDigit, withMs, withSplitT -> formatter
58-
DATETIME_FORMATTERS[0][0][0] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s", false);
59-
DATETIME_FORMATTERS[0][0][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s", false);
60-
DATETIME_FORMATTERS[0][1][0] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s.%f", false);
61-
DATETIME_FORMATTERS[0][1][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s.%f", false);
62-
DATETIME_FORMATTERS[1][0][0] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s", false);
63-
DATETIME_FORMATTERS[1][0][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s", false);
64-
DATETIME_FORMATTERS[1][1][0] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s.%f", false);
65-
DATETIME_FORMATTERS[1][1][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s.%f", false);
57+
// isTwoDigit, withMs, withSplitT, withSec -> formatter
58+
DATETIME_FORMATTERS[0][0][0][0] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i", false);
59+
DATETIME_FORMATTERS[0][0][0][1] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s", false);
60+
DATETIME_FORMATTERS[0][0][1][0] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i", false);
61+
DATETIME_FORMATTERS[0][0][1][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s", false);
62+
DATETIME_FORMATTERS[0][1][0][1] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s.%f", false);
63+
DATETIME_FORMATTERS[0][1][1][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s.%f", false);
64+
DATETIME_FORMATTERS[1][0][0][0] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i", false);
65+
DATETIME_FORMATTERS[1][0][0][1] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s", false);
66+
DATETIME_FORMATTERS[1][0][1][0] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i", false);
67+
DATETIME_FORMATTERS[1][0][1][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s", false);
68+
DATETIME_FORMATTERS[1][1][0][1] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s.%f", false);
69+
DATETIME_FORMATTERS[1][1][1][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s.%f", false);
6670
}
6771

6872
public static LocalDateTime parseStrictDateTime(String str) {
@@ -72,9 +76,10 @@ public static LocalDateTime parseStrictDateTime(String str) {
7276
if (str.contains(":")) {
7377
// datetime
7478
int isTwoDigit = str.split("-")[0].length() == 2 ? 1 : 0;
79+
int withSec = str.split(":").length > 2 ? 1 : 0;
7580
int withMs = str.contains(".") ? 1 : 0;
7681
int withSplitT = str.contains("T") ? 1 : 0;
77-
DateTimeFormatter formatter = DATETIME_FORMATTERS[isTwoDigit][withMs][withSplitT];
82+
DateTimeFormatter formatter = DATETIME_FORMATTERS[isTwoDigit][withMs][withSplitT][withSec];
7883
return parseStringWithDefaultHSM(str, formatter);
7984
} else {
8085
// date

fe/fe-core/src/test/java/com/starrocks/common/util/DateUtilsTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,19 @@ public void testParseDatTimeString() {
6767
long ts = Utils.getLongFromDateTime(lt2);
6868
Assert.assertEquals(ts, 1682600771);
6969
}
70+
71+
{
72+
String datetime1 = "2024-01-27T21:06";
73+
LocalDateTime lt1 = DateUtils.parseStrictDateTime(datetime1);
74+
Assert.assertEquals(lt1.toString(), "2024-01-27T21:06");
75+
String datetime2 = "2024-01-27T21:06:00";
76+
LocalDateTime lt2 = DateUtils.parseStrictDateTime(datetime2);
77+
Assert.assertEquals(lt2.toString(), "2024-01-27T21:06");
78+
Assert.assertEquals(Utils.getLongFromDateTime(lt1), Utils.getLongFromDateTime(lt2));
79+
String datetime3 = "2024-01-27 21:06:01";
80+
LocalDateTime lt3 = DateUtils.parseStrictDateTime(datetime3);
81+
Assert.assertEquals(lt3.toString(), "2024-01-27T21:06:01");
82+
}
7083
} catch (Exception e) {
7184
Assert.fail();
7285
}

0 commit comments

Comments
 (0)