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;

Reply via email to