当前位置: 首页 > news >正文

Java8 时间字符串校验是否为对应的日期格式

时间字符串格式校验

严格模式下校验日期字符串

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

http://www.lryc.cn/news/220358.html

相关文章:

  • 2023.11.6联赛总结
  • UE5——源码阅读——9——引擎预初始化
  • 报错Could not resolve placeholder ‘driver‘ in value “${driver}“
  • Rust编程基础核心之所有权(下)
  • 高防CDN:企业网络安全的坚强后盾
  • gitlab 设置 分支只读
  • Spring Boot 面试题——常用注解
  • RabbitMQ(高级特性) 设置队列所有消息存活时间
  • 刷题学习记录
  • WPF中依赖属性及附加属性的概念及用法
  • Golang爬虫封装
  • 技术分享 | 抓包分析 TCP 协议
  • 基于前馈神经网络完成鸢尾花分类
  • 软考高级系统架构设计师系列之:UML建模、设计模式和软件架构设计章节选择题详解
  • 成集云 | 电商平台、ERP、WMS集成 | 解决方案
  • 吴恩达《机器学习》4-6->4-7:正规方程
  • VO、DTO
  • RK3566上运行yolov5模型进行图像识别
  • 汽车标定技术(一):XCP概述
  • 短视频的运营方法
  • GitLab CI/CD 持续集成/部署 SpringBoot 项目
  • 第二证券:政策效应逐步显现 A股修复行情有望持续演绎
  • sql逻辑优化
  • 【数据结构】树与二叉树(一):树(森林)的基本概念:父亲、儿子、兄弟、后裔、祖先、度、叶子结点、分支结点、结点的层数、路径、路径长度、结点的深度、树的深度
  • 2024 Android Framework学习大纲之基础理论篇
  • 【深度学习】Yolov8 区域计数
  • Windows 系统服务器部署jar包时,推荐使用winsw,将jar包注册成服务,并设置开机启动。
  • npm 包管理
  • 力扣370周赛 -- 第三题(树形DP)
  • GPT学习笔记