cloud-fan commented on a change in pull request #27707: [SPARK-30958][SQL] do not set default era for DateTimeFormatter URL: https://github.com/apache/spark/pull/27707#discussion_r384649943
########## File path: sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/TimestampFormatter.scala ########## @@ -62,10 +62,22 @@ class Iso8601TimestampFormatter( val parsed = formatter.parse(s) val parsedZoneId = parsed.query(TemporalQueries.zone()) val timeZoneId = if (parsedZoneId == null) zoneId else parsedZoneId - val zonedDateTime = toZonedDateTime(parsed, timeZoneId) + val year = if (parsed.isSupported(YEAR)) { + parsed.get(YEAR) + } else if (parsed.isSupported(YEAR_OF_ERA) && !parsed.isSupported(ERA)) { + // This means the year pattern is "yyyy" without "G" to specify era. + parsed.get(YEAR_OF_ERA) + } else { + throw new DateTimeException("Cannot obtain year from timestamp string " + s) + } + // Parsed input might not have time related part. In that case, time component is set to + // zeros. + val parsedLocalTime = parsed.query(TemporalQueries.localTime) + val localTime = if (parsedLocalTime == null) LocalTime.MIDNIGHT else parsedLocalTime + val localDate = LocalDate.of(year, parsed.get(MONTH_OF_YEAR), parsed.get(DAY_OF_MONTH)) Review comment: The main change is here: instead of doing `temporalAccessor.query(TemporalQueries.localDate)`, we can get the date fields manually, then we have a chance to handle the missing era. ---------------------------------------------------------------- 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. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org