dybyte commented on code in PR #9969:
URL: https://github.com/apache/seatunnel/pull/9969#discussion_r2448664720
##########
seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/DateTimeUtils.java:
##########
@@ -314,12 +316,25 @@ public static String toString(LocalDateTime dateTime,
Formatter formatter) {
return dateTime.format(FORMATTER_MAP.get(formatter));
}
+ public static String toString(LocalDate date, Formatter formatter) {
+ return date.format(FORMATTER_MAP.get(formatter));
+ }
Review Comment:
Let's reuse
https://github.com/apache/seatunnel/blob/6d9e0a17556f780fe520e2015f767c1921be4f16/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/DateUtils.java#L188-L190
##########
seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/DateTimeUtils.java:
##########
@@ -314,12 +316,25 @@ public static String toString(LocalDateTime dateTime,
Formatter formatter) {
return dateTime.format(FORMATTER_MAP.get(formatter));
}
+ public static String toString(LocalDate date, Formatter formatter) {
+ return date.format(FORMATTER_MAP.get(formatter));
+ }
+
+ public static String toString(OffsetDateTime offsetDateTime, Formatter
formatter) {
+ return offsetDateTime.format(FORMATTER_MAP.get(formatter));
+ }
+
+ public static String toString(Temporal temporal, Formatter formatter) {
+ return FORMATTER_MAP.get(formatter).format(temporal);
+ }
+
public static String toString(long timestamp, Formatter formatter) {
Instant instant = Instant.ofEpochMilli(timestamp);
return toString(LocalDateTime.ofInstant(instant,
ZoneId.systemDefault()), formatter);
}
public enum Formatter {
+ YYYY_MM_DD("yyyy-MM-dd"),
Review Comment:
https://github.com/apache/seatunnel/blob/6d9e0a17556f780fe520e2015f767c1921be4f16/seatunnel-common/src/main/java/org/apache/seatunnel/common/utils/DateUtils.java#L193
It already exists here.
##########
seatunnel-transforms-v2/src/main/java/org/apache/seatunnel/transform/sql/zeta/functions/StringFunction.java:
##########
@@ -625,11 +631,74 @@ public static String space(List<Object> args) {
return new String(chars, StandardCharsets.ISO_8859_1);
}
+ /**
+ * Convert date/time objects to standardized string format
+ *
+ * @param obj the object to convert
+ * @return standardized string representation of the date/time object
+ */
+ private static String convertDateToString(Object obj) {
+ if (obj == null) {
+ return null;
+ }
+
+ // Handle java.util.Date and subclasses (java.sql.Date,
java.sql.Timestamp)
+ if (obj instanceof Date) {
+ Date date = (Date) obj;
+ LocalDateTime localDateTime =
LocalDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC);
+ return DateTimeUtils.toString(
+ localDateTime,
DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS);
+ }
+
+ // Handle java.time types
+ if (obj instanceof LocalDate) {
+ LocalDate localDate = (LocalDate) obj;
+ return DateTimeUtils.toString(localDate,
DateTimeUtils.Formatter.YYYY_MM_DD);
+ }
+
+ if (obj instanceof LocalDateTime) {
+ LocalDateTime localDateTime = (LocalDateTime) obj;
+ return DateTimeUtils.toString(
+ localDateTime,
DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS);
+ }
+
+ if (obj instanceof OffsetDateTime) {
+ OffsetDateTime offsetDateTime = (OffsetDateTime) obj;
+ return DateTimeUtils.toString(
+ offsetDateTime,
DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS);
+ }
+
+ // For Temporal objects that are not specifically handled above
+ if (obj instanceof Temporal) {
+ Temporal temporal = (Temporal) obj;
+ try {
+ // Try to format as timestamp first
+ return DateTimeUtils.toString(
+ temporal, DateTimeUtils.Formatter.YYYY_MM_DD_HH_MM_SS);
+ } catch (Exception e) {
+ try {
+ // Fallback to date-only format
+ return DateTimeUtils.toString(temporal,
DateTimeUtils.Formatter.YYYY_MM_DD);
+ } catch (Exception ex) {
+ // If all else fails, use toString
+ return obj.toString();
+ }
+ }
+ }
Review Comment:
Please add a test case for this part of the code.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]