This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git
The following commit(s) were added to refs/heads/master by this push:
new a5431b32cb [common] Fix timestamp partition values being written but
not readable (#9115)
a5431b32cb is described below
commit a5431b32cb38d4d9d7c697b65a984efb81966706
Author: Arnav Balyan <[email protected]>
AuthorDate: Mon Aug 10 14:14:01 2026 +0530
[common] Fix timestamp partition values being written but not readable
(#9115)
---
.../org/apache/paimon/utils/DateTimeUtils.java | 7 ++++++
.../org/apache/paimon/utils/DateTimeUtilsTest.java | 25 ++++++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git
a/paimon-common/src/main/java/org/apache/paimon/utils/DateTimeUtils.java
b/paimon-common/src/main/java/org/apache/paimon/utils/DateTimeUtils.java
index 90c6d447f5..be9857883d 100644
--- a/paimon-common/src/main/java/org/apache/paimon/utils/DateTimeUtils.java
+++ b/paimon-common/src/main/java/org/apache/paimon/utils/DateTimeUtils.java
@@ -71,6 +71,13 @@ public class DateTimeUtils {
.appendPattern(" [HH][H]:[mm][m]:[ss][s]")
.appendFraction(NANO_OF_SECOND, 0, 9, true)
.optionalEnd()
+ .optionalStart()
+ .appendPattern("'T'[HH][H]:[mm][m]")
+ .optionalStart()
+ .appendPattern(":[ss][s]")
+ .appendFraction(NANO_OF_SECOND, 0, 9, true)
+ .optionalEnd()
+ .optionalEnd()
.toFormatter();
/**
diff --git
a/paimon-common/src/test/java/org/apache/paimon/utils/DateTimeUtilsTest.java
b/paimon-common/src/test/java/org/apache/paimon/utils/DateTimeUtilsTest.java
index cbc8267e42..071ea5aa6e 100644
--- a/paimon-common/src/test/java/org/apache/paimon/utils/DateTimeUtilsTest.java
+++ b/paimon-common/src/test/java/org/apache/paimon/utils/DateTimeUtilsTest.java
@@ -24,9 +24,11 @@ import org.junit.jupiter.api.Test;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
import java.util.TimeZone;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
/** Test for {@link DateTimeUtils}. */
public class DateTimeUtilsTest {
@@ -69,6 +71,29 @@ public class DateTimeUtilsTest {
.isEqualTo(ts.toLocalDateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
}
+ @Test
+ public void testParseTimestampDataRejectsMissingSeparator() {
+ assertThatThrownBy(() ->
DateTimeUtils.parseTimestampData("2024-01-0112:30", 3))
+ .isInstanceOf(DateTimeParseException.class);
+ assertThatThrownBy(() -> DateTimeUtils.parseTimestampData("2024-01-14
19:35", 3))
+ .isInstanceOf(DateTimeParseException.class);
+ }
+
+ @Test
+ public void testParseTimestampDataWrittenByToString() {
+ for (LocalDateTime time :
+ new LocalDateTime[] {
+ LocalDateTime.of(2024, 1, 1, 12, 30),
+ LocalDateTime.of(2024, 1, 1, 0, 0),
+ LocalDateTime.of(2024, 1, 1, 1, 2, 3),
+ LocalDateTime.of(2024, 1, 1, 1, 2, 3, 456_000),
+ LocalDateTime.of(1, 1, 1, 0, 0)
+ }) {
+ String dt = Timestamp.fromLocalDateTime(time).toString();
+ assertThat(DateTimeUtils.parseTimestampData(dt,
6).toLocalDateTime()).isEqualTo(time);
+ }
+ }
+
@Test
public void testTimestamp() {
int nanos = 100;