代码功能解析
-
获取当前时间 :
LocalDateTime.now()获取当前日期时间 -
遍历证书列表:对每个证书进行过期检查
-
状态默认值 :
status = 1(默认有效) -
过期判断逻辑:
-
尝试将日期字符串解析为
LocalDateTime -
如果失败,尝试解析为
LocalDate -
两种格式都解析失败时保持默认值 1
-
-
状态设置:将状态转换为字符串设置到证书对象
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