Skip to content

Commit 3726b13

Browse files
authored
[Enhancement]Enhance datetime format (backport #39986) (#40503)
Signed-off-by: leoyy0316 <[email protected]>
1 parent d31774d commit 3726b13

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
@@ -72,19 +72,23 @@ public class DateUtils {
7272
private static final DateTimeFormatter STRICT_DATE_NO_SPLIT_FORMATTER =
7373
unixDatetimeStrictFormatter("%Y%m%e", true);
7474

75-
// isTwoDigit, withMs, withSplitT -> formatter
76-
private static final DateTimeFormatter[][][] DATETIME_FORMATTERS = new DateTimeFormatter[2][2][2];
75+
// isTwoDigit, withMs, withSplitT, withSec -> formatter
76+
private static final DateTimeFormatter[][][][] DATETIME_FORMATTERS = new DateTimeFormatter[2][2][2][2];
7777

7878
static {
79-
// isTwoDigit, withMs, withSplitT -> formatter
80-
DATETIME_FORMATTERS[0][0][0] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s", false);
81-
DATETIME_FORMATTERS[0][0][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s", false);
82-
DATETIME_FORMATTERS[0][1][0] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s.%f", false);
83-
DATETIME_FORMATTERS[0][1][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s.%f", false);
84-
DATETIME_FORMATTERS[1][0][0] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s", false);
85-
DATETIME_FORMATTERS[1][0][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s", false);
86-
DATETIME_FORMATTERS[1][1][0] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s.%f", false);
87-
DATETIME_FORMATTERS[1][1][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s.%f", false);
79+
// isTwoDigit, withMs, withSplitT, withSec -> formatter
80+
DATETIME_FORMATTERS[0][0][0][0] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i", false);
81+
DATETIME_FORMATTERS[0][0][0][1] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s", false);
82+
DATETIME_FORMATTERS[0][0][1][0] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i", false);
83+
DATETIME_FORMATTERS[0][0][1][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s", false);
84+
DATETIME_FORMATTERS[0][1][0][1] = unixDatetimeStrictFormatter("%Y-%m-%e %H:%i:%s.%f", false);
85+
DATETIME_FORMATTERS[0][1][1][1] = unixDatetimeStrictFormatter("%Y-%m-%eT%H:%i:%s.%f", false);
86+
DATETIME_FORMATTERS[1][0][0][0] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i", false);
87+
DATETIME_FORMATTERS[1][0][0][1] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s", false);
88+
DATETIME_FORMATTERS[1][0][1][0] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i", false);
89+
DATETIME_FORMATTERS[1][0][1][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s", false);
90+
DATETIME_FORMATTERS[1][1][0][1] = unixDatetimeStrictFormatter("%y-%m-%e %H:%i:%s.%f", false);
91+
DATETIME_FORMATTERS[1][1][1][1] = unixDatetimeStrictFormatter("%y-%m-%eT%H:%i:%s.%f", false);
8892
}
8993

9094
public static LocalDateTime parseStrictDateTime(String str) {
@@ -94,9 +98,10 @@ public static LocalDateTime parseStrictDateTime(String str) {
9498
if (str.contains(":")) {
9599
// datetime
96100
int isTwoDigit = str.split("-")[0].length() == 2 ? 1 : 0;
101+
int withSec = str.split(":").length > 2 ? 1 : 0;
97102
int withMs = str.contains(".") ? 1 : 0;
98103
int withSplitT = str.contains("T") ? 1 : 0;
99-
DateTimeFormatter formatter = DATETIME_FORMATTERS[isTwoDigit][withMs][withSplitT];
104+
DateTimeFormatter formatter = DATETIME_FORMATTERS[isTwoDigit][withMs][withSplitT][withSec];
100105
return parseStringWithDefaultHSM(str, formatter);
101106
} else {
102107
// 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)