将所选日期与当前日期进行比较,并且不能超过1天

问题描述

我能解决吗? 我想获取用户键入的时间并与当前时间进行比较,如果相差超过1天,则会弹出一条错误消息。我该怎么办?

Iterator i= rows.iterator(); // Iterating grid rows
while (i.hasNext()) {
    FormRow row = (FormRow) i.next();
    String menudt = row.get("menudate");
}


String CurrentDate;
Date date1 = new Date();
Date date2;
SimpleDateFormat dates = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
//Setting dates
date1.setTime(System.currentTimeMillis());
CurrentDate = dates.format(date1);
date2 = dates.parse(menudt + " " + "18:00:00"); //There are an error here it cannot change the string to date
date1 = dates.parse(CurrentDate);

long diff = Math.abs(date2.getTime() - date1.getTime());

long day = 86400000;


if (diff > day){
       System.out.println("HAHAHAH")
}

解决方法

您可以使用以下方法检查日期:

static boolean isValid(String dateString) {
    LocalDate date = LocalDate.parse(dateString,DateTimeFormatter.ofPattern("dd/MM/uuuu"));
    
    LocalDate today = LocalDate.now();
    LocalDate yesterday = today.minusDays(1);
    LocalDate tomorrow = today.plusDays(1);
    if (date.isBefore(yesterday) || date.isAfter(tomorrow))
        return false;
    return true;
}

可以缩写为:

static boolean isValid(String dateString) {
    LocalDate date = LocalDate.parse(dateString,DateTimeFormatter.ofPattern("dd/MM/uuuu"));
    LocalDate today = LocalDate.now();
    return (! date.isBefore(today.minusDays(1)) && ! date.isAfter(today.plusDays(1)));
}

或者,您可以执行此操作,这与您尝试的操作更接近:

static boolean isValid(String dateString) {
    LocalDate date = LocalDate.parse(dateString,DateTimeFormatter.ofPattern("dd/MM/uuuu"));
    return (Math.abs(ChronoUnit.DAYS.between(LocalDate.now(),date)) <= 1);
}