不断收到 DateTimeParseException,有人能发现问题出在哪里吗?

问题描述 投票:0回答:1

我有以下 Java(版本 8)方法,可以将看起来像

'01-FEB-25 12.00.00.000000 AM UTC'
的输入日期时间字符串解析为 Oracle SQL 数据库可以理解的内容,但我不断收到错误
"java.time.format.DateTimeParseException: Text '01-FEB-25 12.00.00.000000 AM UTC' could not be parsed at index 3"

private String convertDateTime(String dateTimeInput) {
        if (csDateTime != null) {
            try {
                // Incoming date time looks like '01-FEB-25 12.00.00.000000 AM UTC'
                DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.SSSSSS a z", Locale.ENGLISH);
                DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

                // Parse the input string into ZonedDateTime
                ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeInput, inputFormatter);

                // Convert to LocalDateTime in UTC
                LocalDateTime dateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime();

                return dateTime.format(outputFormatter);
            } catch (DateTimeParseException e) {
                LOG.error("Failed to parse date: {}", dateTimeInput, e);
                return null;
            }
        }
        return null;
    }

我还使用

DateTimeFormatterBuilder
尝试了下面的代码,但它仍然无法解析输入字符串,任何人都可以发现我的代码中的问题并可以为我指出正确的方向吗?

DateTimeFormatter inputFormatter = new DateTimeFormatterBuilder()
                        .parseCaseInsensitive()
                        .appendPattern("dd-MMM-yy hh.mm.ss.SSSSSS a z")
                        .optionalStart()
                        .appendFraction(ChronoField.NANO_OF_SECOND, 0, 6, true)
                        .optionalEnd()
                        .appendPattern(" a z") // AM/PM and time zone
                        .toFormatter(Locale.ENGLISH);
                DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeInput, inputFormatter);
                LocalDateTime dateTime = zonedDateTime.withZoneSameInstant(ZoneId.of("UTC")).toLocalDateTime();
                return dateTime.format(outputFormatter);
java datetime java-time
1个回答
0
投票

看起来这会成功:

private String convertDateTime(String input) {
        if (csDateTime != null) {
            try {
                SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.SSSSSS a z");
                formatter.setTimeZone(TimeZone.getTimeZone("UTC"));

                Date parsedDate = formatter.parse(input);
                return new Timestamp(parsedDate.getTime()).toString();
            } catch (Exception e) {
                LOG.error("Failed to parse date: {}", input, e);
                return null;
            }
        }
        return null;
    }
© www.soinside.com 2019 - 2024. All rights reserved.