确定您的日期介于日期范围之间

时间:2019-05-22 08:43:38

标签: java jsp-tags

我有输入参数MMDD-MMDD,并且有一个日期值示例,11月10日,所以现在我需要检查11月10日是否介于MMDD-MMDD之间。

当前我有一个代码,如果格式像这样的0122-1123,但对于1123-0122不起作用,则可以正常工作。

所以我已经完成了一种解决方案,但是没有用。当日期范围被翻转(1123-0122)时,我将两者都加年,并将加年加到0122,所以它将变成nov-23-2019至jan-22-2020,但我选择了一个日期(jan 21-2019)那么显然它没有被选中,请您在逻辑上帮助我确定给定日期是否在范围内,而无需使用 年。

Date procDate = getProcessDateTime().getDate();
String dateRanges=getDateRange().trim();
int leftSetMonth = Integer.parseInt(dateRanges.substring(0, 2));
int leftSetDate = Integer.parseInt(dateRanges.substring(2, 4));
int rightSetMonth = Integer.parseInt(dateRanges.substring(5, 7));
int rightSetDate = Integer.parseInt(dateRanges.substring(7, 9));

Date leftCollectiveDate = new Date(procDate.getYear(), leftSetMonth, leftSetDate);

Date rightCollectiveDate = new Date(procDate.getYear(), rightSetMonth, rightSetDate);

if (leftCollectiveDate.isAfter(rightCollectiveDate)) {
    rightCollectiveDate = new Date(procDate.getYear() + 1, rightSetMonth, rightSetDate);
}

if (leftCollectiveDate.isSameOrBefore(procDate) && rightCollectiveDate.isSameOrAfter(procDate)) {
    result = Bool.TRUE;
    return result;
}

1 个答案:

答案 0 :(得分:1)

这是使用LocalDate的解决方案(使用问题中声明的变量)

LocalDate localDate = Instant.ofEpochMilli(procDate.getTime()).atZone(ZoneId.systemDefault()).toLocalDate();

LocalDate fromDate = LocalDate.of(localDate.getYear(), leftSetMonth, leftSetDate);
LocalDate toDate = LocalDate.of(localDate.getYear(), rightSetMonth, rightSetDate);

if (toDate.isBefore(LocalDate.now())) {
  toDate = toDate.plusYears(1);
}

if (localDate.isAfter(from) && localDate.isBefore(to)) {
  System.out.println(localDate + " is valid");
} else {
  System.out.println("Out of range");
}