Liferay 6.2 Maven项目中Java 7实现日期年份差大于4的判断
嘿,我来帮你搞定这个年份比较的问题!
首先,要实现仅比较两个日期的年份并判断差值是否大于4,我们可以借助Java的Calendar类(因为Liferay 6.2通常基于Java 6,这个类兼容性最好)来提取年份,然后计算差值。下面是具体的实现方案,直接整合到你的现有定时任务代码里就行:
步骤1:简化当前日期处理(可选)
你之前的代码里把currentDate格式化为当天的0点,但如果只需要比较年份的话,这一步其实是多余的,可以直接删掉,节省代码复杂度。
步骤2:修改循环中的年份判断逻辑
在遍历penalties的循环里,替换或新增年份判断的逻辑:
@Override public void receive(Message message) throws MessageListenerException { logger.info("Scheduler for checking dates on Penalties has started..."); ApplicationContext applicationContext = ApplicationContextProvider.getApplicationContext(); PenaltyService service = (PenaltyService)applicationContext.getBean("service"); // 直接获取当前日历实例,用于提取年份 Calendar currentCal = Calendar.getInstance(); int currentYear = currentCal.get(Calendar.YEAR); List<Penalty> penalties = service.findAll(); for (Penalty penalty : penalties) { if (penalty.endDate == null) { System.out.println("No EndDate..."); } else { // 把penalty的endDate转成Calendar,提取年份 Calendar endDateCal = Calendar.getInstance(); endDateCal.setTime(penalty.endDate); int endYear = endDateCal.get(Calendar.YEAR); // 计算年份差值,判断是否大于4 int yearDiff = currentYear - endYear; if (yearDiff > 4) { penalty.setRevocationOrCompletion(1); System.out.println("Penalty ID: " + penalty.getId() + " | End year (" + endYear + ") is over 4 years before current year (" + currentYear + ")"); } // 如果你还要保留原来的"EndDate在当前日期之前/等于则设置为1"的逻辑,就解开下面的注释 /* else if (penalty.endDate.before(new Date()) || penalty.endDate.compareTo(new Date()) == 0) { penalty.setRevocationOrCompletion(1); } */ } System.out.println("-------------------" + penalty.getEndDate() + " " + penalty.isRevocationOrCompletion()); } }
注意事项
- 时区问题:如果你的Oracle数据库存储的日期是UTC时区,而服务器用的是其他时区,记得给
Calendar设置对应时区,避免年份计算错误:currentCal.setTimeZone(TimeZone.getTimeZone("UTC")); endDateCal.setTimeZone(TimeZone.getTimeZone("UTC")); - Java版本兼容:如果你的项目已经升级到Java 8+,可以用更简洁的
LocalDate类来处理,代码会更易读:LocalDate currentLocalDate = LocalDate.now(); int currentYear = currentLocalDate.getYear(); LocalDate endLocalDate = penalty.endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); int endYear = endLocalDate.getYear(); if (currentYear - endYear > 4) { penalty.setRevocationOrCompletion(1); }
这样就能轻松实现你要的年份差判断啦!
内容的提问来源于stack exchange,提问作者Nikos Krous
相关产品推荐
相关产品推荐

