You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对比过期日期与当日日期并正确设置表格行样式?

解决LocalDate日期对比设置表格行样式的问题

你当前的代码逻辑存在错误,导致无法按预期给过期日期对应的行设置样式。预期效果是:

  • 当天过期的行:红色背景(tomato)
  • 3个月内即将过期的行:橙色背景(orange)
  • 超过3个月才过期的行:浅绿色背景(lightgreen)

原代码的问题

  1. 逻辑错误:第二个条件today.before(LocalDate.parse(medicament).plusMonths(3))会匹配所有未过期的日期——只要过期日期在今天之后,expiryDate.plusMonths(3)必然晚于today,导致本该显示浅绿色的行也被设为橙色。
  2. 性能浪费:多次调用LocalDate.parse(medicament)重复解析日期字符串,没必要。

修正后的代码

先将日期字符串解析一次,再按正确的逻辑判断:

LocalDate expiryDate = LocalDate.parse(medicament);
LocalDate today = LocalDate.now();

if (today.isEqual(expiryDate) || today.isAfter(expiryDate)) {
    // 当天过期或已过期
    currentRow.setStyle("-fx-background-color:tomato");
} else if (today.plusMonths(3).isAfter(expiryDate)) {
    // 未来3个月内过期
    currentRow.setStyle("-fx-background-color:orange");
} else {
    // 超过3个月才过期
    currentRow.setStyle("-fx-background-color:lightgreen");
}

逻辑说明

  • 优先判断已过期/当天过期的情况,设置红色背景
  • 再判断过期日期在未来3个月内的情况,设置橙色背景
  • 最后剩下的就是过期日期在3个月之后的正常情况,设置浅绿色背景

如果你的业务需要基于特定时区判断日期,可以给LocalDate.now()指定时区,比如:

LocalDate today = LocalDate.now(ZoneId.of("Asia/Shanghai"));

内容的提问来源于stack exchange,提问作者Marian34

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 22:30:05