java - 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
解决方案
如果您更改ORACLE_DATE_FORMAT2
为d 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
<--------------------------->
推荐阅读
- c# - 球体投射仅输出游戏对象的中心
- java - 我无法在调试中读取所有输出文本
- tabular - 表格编辑器 2 - 在 unicode 文件中导出度量
- c++ - 消除最大的重叠球体
- node.js - 我无法用 n 更新节点
- javascript - 在Javascript中将数组元素添加到JSON的元素
- java - 如何查看所有以前的流媒体结果
- android - Mac 上的 Android Studio 无法构建:java.io.FileNotFoundException(不允许操作)
- javascript - 如何绕过 CORS
- c++ - 这种转换是通过 TCP/IP 发送的正确方法吗?