Skip to content

Commit 06c372b

Browse files
leoyy0316mergify[bot]
authored andcommitted
[Enhancement]Enhance datetime format (#39986)
Signed-off-by: leoyy0316 <[email protected]> (cherry picked from commit 20e682c)
1 parent 2584153 commit 06c372b

File tree

4 files changed

+82
-12
lines changed

4 files changed

+82
-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: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,20 @@ 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+
}
83+
7084
} catch (Exception e) {
7185
Assert.fail();
7286
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
-- name: test_iceberg_catalog_timestamp_type
2+
create external catalog ice_cat_${uuid0}
3+
properties
4+
(
5+
"type" = "iceberg",
6+
"iceberg.catalog.type" = "hive",
7+
"hive.metastore.uris" = "${iceberg_catalog_hive_metastore_uris}"
8+
);
9+
set catalog ice_cat_${uuid0};
10+
create database ice_db_${uuid0};
11+
use ice_db_${uuid0};
12+
create table ice_tbl_${uuid0} (
13+
col_str int,
14+
col_int datetime
15+
);
16+
insert into ice_tbl_${uuid0} values (1, '2024-01-29 01:00:00'),(2, '2024-01-30 20:10:00'),(3,null);
17+
-- result:
18+
-- !result
19+
select * from ice_cat_${uuid0}.ice_db_${uuid0}.ice_tbl_${uuid0};
20+
-- result:
21+
1 2024-01-29 01:00:00
22+
2 2024-01-30 20:10:00
23+
3 None
24+
-- !result
25+
drop table ice_tbl_${uuid0} force;
26+
drop database ice_db_${uuid0};
27+
drop catalog ice_cat_${uuid0};
28+
-- result:
29+
-- !result
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-- name: test_iceberg_catalog_timestamp_type
2+
create external catalog ice_cat_${uuid0}
3+
properties
4+
(
5+
"type" = "iceberg",
6+
"iceberg.catalog.type" = "hive",
7+
"hive.metastore.uris" = "${iceberg_catalog_hive_metastore_uris}"
8+
);
9+
set catalog ice_cat_${uuid0};
10+
create database ice_db_${uuid0};
11+
use ice_db_${uuid0};
12+
create table ice_tbl_${uuid0} (
13+
col_str int,
14+
col_int datetime
15+
);
16+
insert into ice_tbl_${uuid0} values (1, '2024-01-29 01:00:00'),(2, '2024-01-30 20:10:00'),(3,null);
17+
18+
select * from ice_cat_${uuid0}.ice_db_${uuid0}.ice_tbl_${uuid0};
19+
20+
drop table ice_tbl_${uuid0} force;
21+
drop database ice_db_${uuid0};
22+
drop catalog ice_cat_${uuid0};

0 commit comments

Comments
 (0)