通过LocalDateTime判断当前日期是否失效(附Java 中常用的 ISO 格式)

代码功能解析

  1. 获取当前时间 :LocalDateTime.now() 获取当前日期时间

  2. 遍历证书列表:对每个证书进行过期检查

  3. 状态默认值 :status = 1(默认有效)

  4. 过期判断逻辑:

    • 尝试将日期字符串解析为 LocalDateTime

    • 如果失败,尝试解析为 LocalDate

    • 两种格式都解析失败时保持默认值 1

  5. 状态设置:将状态转换为字符串设置到证书对象

java 复制代码
// 明确日期格式
private static final DateTimeFormatter[] DATE_FORMATTERS = {
    DateTimeFormatter.ISO_LOCAL_DATE_TIME,
    DateTimeFormatter.ISO_LOCAL_DATE
};

public void checkCertificateExpiry(List<Certificate> certificates) {
    LocalDateTime now = LocalDateTime.now();
    LocalDate today = now.toLocalDate();
    
    for (Certificate cert : certificates) {
        String expiryDateStr = cert.getExpiryDate();
        if (StringUtils.isBlank(expiryDateStr)) {
            cert.setCertificateStatus("1"); // 无过期日期视为有效
            continue;
        }
        
        boolean isExpired = false;
        // 尝试解析不同格式
        for (DateTimeFormatter formatter : DATE_FORMATTERS) {
            try {
                TemporalAccessor parsed = formatter.parse(expiryDateStr);
                if (parsed.isSupported(ChronoField.HOUR_OF_DAY)) {
                    // 包含时间部分
                    LocalDateTime expiryDateTime = LocalDateTime.from(parsed);
                    isExpired = expiryDateTime.isBefore(now);
                } else {
                    // 仅日期部分
                    LocalDate expiryDate = LocalDate.from(parsed);
                    isExpired = expiryDate.isBefore(today);
                }
                break; // 解析成功则跳出
            } catch (DateTimeParseException e) {
                // 继续尝试下一种格式
                continue;
            }
        }
        
        cert.setCertificateStatus(isExpired ? "0" : "1");
    }
}

代码中举例的日期格式为:

1. ISO_LOCAL_DATE - 仅日期格式

  • 格式 :yyyy-MM-dd

  • 示例:

    • 2024-12-25

    • 2024-01-05

    • 1999-12-31

  • 特点:包含年、月、日,用连字符分隔

2. ISO_LOCAL_DATE_TIME - 日期时间格式

  • 格式 :yyyy-MM-dd'T'HH:mm:ss 或 yyyy-MM-dd'T'HH:mm:ss.SSS

  • 示例:

    • 2024-12-25T08:30:00(完整秒)

    • 2024-12-25T08:30:00.000(毫秒)

    • 2024-12-25T08:30(分钟)

    • 2024-12-25T08:30:00.123456789(纳秒)

  • 特点:

    • 日期和时间用大写字母 T 分隔

    • 时间部分可以省略秒、纳秒

    • 24小时制

java 复制代码
// Java 中常用的 ISO 格式
DateTimeFormatter.ISO_LOCAL_DATE          // 2024-12-25
DateTimeFormatter.ISO_LOCAL_TIME          // 08:30:00
DateTimeFormatter.ISO_LOCAL_DATE_TIME     // 2024-12-25T08:30:00
DateTimeFormatter.ISO_INSTANT             // 2024-12-25T00:30:00Z (UTC)
DateTimeFormatter.ISO_ZONED_DATE_TIME     // 2024-12-25T08:30:00+08:00[Asia/Shanghai]
DateTimeFormatter.ISO_OFFSET_DATE_TIME    // 2024-12-25T08:30:00+08:00
DateTimeFormatter.ISO_DATE                // 2024-12-25 或 2024-12-25+08:00
DateTimeFormatter.ISO_TIME                // 08:30:00 或 08:30:00+08:00
DateTimeFormatter.ISO_DATE_TIME           // 2024-12-25T08:30:00 或 2024-12-25T08:30:00+08:00
相关推荐
xcl09254 小时前
北京24小时自助健身房系统软件开发实战:从架构到部署全流程指南
java·spring boot·架构
一 乐5 小时前
动漫书销售商城|基于springboot + vue动漫书销售商城(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕业设计
卓怡学长6 小时前
w214基于jsp知道特产网
java·intellij-idea
步行cgn6 小时前
Spring 注解使用详解
java·spring
一条小小yu6 小时前
Spring IoC的理解
java·后端·spring
落魄实习生6 小时前
Agent Scope Java 2.x 系列【7】工具使用
java·开发语言·ai
旺仔学长 哈哈6 小时前
springboot钓鱼爱好者交流平台APP设计与实现
java·spring boot·mysql·充电桩管理系统
自强的小白8 小时前
核心功能(Service接口)
java·mybatis
乌暮9 小时前
深入理解 Java 泛型:把「万能盒子」用对、用稳
java·开发语言·后端·学习