已解决
Java8 时间字符串校验是否为对应的日期格式
来自网友在路上 174874提问 提问时间:2023-11-07 10:26:51阅读次数: 74
最佳答案 问答题库748位专家为你答疑解惑
时间字符串格式校验
严格模式下校验日期字符串
public static boolean isDateStrict(String dateStr, String pattern) {try {DateTimeFormatter formatter = new DateTimeFormatterBuilder().appendPattern("yyyyMMdd").parseDefaulting(ChronoField.ERA, 1).toFormatter().withChronology(IsoChronology.INSTANCE).withResolverStyle(ResolverStyle.STRICT);LocalDate.parse(dateStr, formatter);} catch (Exception e) {log.error("时间格式不正确:{}", e.getMessage());return false;}return true;
}
此方法可以严格校验 yyyyMMdd 的日期格式,或直接使用 uuuuMMdd 的形式转化:
private static final DateTimeFormatter FORMAT = DateTimeFormatter.ofPattern("uuuuMMdd ").withChronology(IsoChronology.INSTANCE).withResolverStyle(STRICT);
public static LocalDate parse(String dateStr) {return LocalDate.parse(dateStr, FORMAT);
}
这是因为在 Java 8 的新日期 API 下,yyyy 表示公元纪年(year-era),这种格式在解析日期时会检查公元位(G),不存在时会报错;而 uuuu 表示和公元没有关系的年。上面例子中使用 parseDefaulting(ChronoField.ERA, 1) 设置一个默认的公元纪年位,表示公元后,就和我们正常的日期保持一致。
当然如果你使用非严格模式,yyyy 和 uuuu 在使用上没有区别。
如果使用非严格模式的 DateTimeFormatter 可能并不会真正的检查出日期字符串的错误,比如 20230230,转日期类型并不会报错,会自动转成一个正确的日期 20230228;
而使用 SimpleDateFormmat 也会有一些问题,比如 2023052,会转成 20230502。
public static boolean isDateSimple(String dateStr, String pattern) {try {SimpleDateFormat format = new SimpleDateFormat(pattern);format.setLenient(false);format.parse(dateStr);} catch (Exception e) {log.error("时间格式不正确:{}", e.getMessage());return false;}return true;
}
public static boolean isDateFormatter(String dateStr, String pattern) {try {DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);LocalDate.parse(dateStr, formatter);} catch (Exception e) {log.error("时间格式不正确:{}", e.getMessage());return false;}return true;
}
参考:https://stackoverflow.com/questions/26393594/using-new-java-8-datetimeformatter-to-do-strict-date-parsing
查看全文
99%的人还看了
相似问题
- 【前端学java】java中的日期操作(12)
- elementplus DateTimePicker 日期范围选择器 设置默认时间范围为当前月的起始时间到结束时间
- 【c++】——类和对象(中)——实现完整的日期类(优化)万字详细解疑答惑
- springMVC 导出Excel ,并提供下载(处理日期格式问题)
- Java获取时间戳、字符串和Date对象的相互转换、日期时间格式化、获取年月日
- VUE获取当前日期的周日和周六
- PostgreSQL--如何计算2个日期的秒数差值
- linux中用date命令获取昨天、明天或多天前后的日期
- laravel自定义日志保存文件加上日期
- 蓝桥杯官网练习题(日期问题)
猜你感兴趣
版权申明
本文"Java8 时间字符串校验是否为对应的日期格式":http://eshow365.cn/6-34452-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!