首页 > 解决方案 > Java 8 – DateTimeFormatter:格式化 Oracle 日期

问题描述

我有这个功能:

private static boolean isDate(String rowData, String pattern) {

    try {
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.getDefault());
        LocalDate.parse(rowData, formatter).atStartOfDay(ZoneId.systemDefault()).toInstant();
        return true;

    } catch (Exception e) {
        return false;

    }

}

private static final String ORACLE_DATE_FORMAT1 = "MMM d, yyyy";
private static final String ORACLE_DATE_FORMAT2 = "dd MMM yyyy";

System.out.println("<--------------------------->");
System.out.println("value -> " + value);
System.out.println("isDate -> " + (isDate(value, ORACLE_DATE_FORMAT1) || isDate(value, ORACLE_DATE_FORMAT2)));
System.out.println("<--------------------------->");

但我得到了这个结果:

value -> 1 Aug 2020
isDate -> false
<--------------------------->
<--------------------------->
value -> 31 Jul 2099
isDate -> true

标签: javaoracledatejava-8datetimeformatter

解决方案


如果您更改ORACLE_DATE_FORMAT2d MMM yyyy. 根据文档,当日期指定为 时dd,它需要 2 个字符的月份日期表示(例如 2020 年 8 月 1 日)。

请注意,此更改将同时1 Aug 2020成功01 Aug 2020

<--------------------------->
value -> 01 Aug 2020
isDate -> true
<--------------------------->
<--------------------------->
value -> 1 Aug 2020
isDate -> true
<--------------------------->

推荐阅读