如何对比过期日期与当日日期并正确设置表格行样式?
解决LocalDate日期对比设置表格行样式的问题
你当前的代码逻辑存在错误,导致无法按预期给过期日期对应的行设置样式。预期效果是:
- 当天过期的行:红色背景(tomato)
- 3个月内即将过期的行:橙色背景(orange)
- 超过3个月才过期的行:浅绿色背景(lightgreen)
原代码的问题
- 逻辑错误:第二个条件
today.before(LocalDate.parse(medicament).plusMonths(3))会匹配所有未过期的日期——只要过期日期在今天之后,expiryDate.plusMonths(3)必然晚于today,导致本该显示浅绿色的行也被设为橙色。 - 性能浪费:多次调用
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
相关产品推荐
相关产品推荐

