JAVA中与Oracle next_day等效的函数

JAVA中与Oracle next_day等效的函数,java,oracle,function,date,calendar,Java,Oracle,Function,Date,Calendar,我想制作一个类似于oracle的next_day()函数的方法,下面是我的代码,它接受星期一、星期二等工作日的日期,并返回从输入日期算起的下一个给定日期 /** * @param date * @param weekDay * @return Gives the date for next weekday specified in the parameter. */ public Date getNextDay(Date value, String weekday) {

我想制作一个类似于oracle的
next_day()
函数的方法,下面是我的代码,它接受星期一、星期二等工作日的日期,并返回从输入日期算起的下一个给定日期

/**
 * @param date
 * @param weekDay
 * @return Gives the date for next weekday specified in the parameter.
 */    
public Date getNextDay(Date value, String weekday) {
    Calendar date1 = Calendar.getInstance();
    date1.setTime(value);
        
    if (weekday.equalsIgnoreCase("MONDAY")) {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
            date1.add(Calendar.DATE, 1);
        }
    } else if (weekday.equalsIgnoreCase("TUESDAY")) {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.TUESDAY) {
            date1.add(Calendar.DATE, 1);
        }
    } else if (weekday.equalsIgnoreCase("WEDNESDAY")) {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.WEDNESDAY) {
            date1.add(Calendar.DATE, 1);
        }
    } else if (weekday.equalsIgnoreCase("THURSDAY")) {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.THURSDAY) {
            date1.add(Calendar.DATE, 1);
        }
    } else if (weekday.equalsIgnoreCase("FRIDAY")) {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.FRIDAY) {
            date1.add(Calendar.DATE, 1);
        }
    } else if (weekday.equalsIgnoreCase("SATURDAY")) {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.SATURDAY) {
            date1.add(Calendar.DATE, 1);
        }
    } else {
        while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.SUNDAY) {
            date1.add(Calendar.DATE, 1);
        }
    }
                
    return date1.getTime();
}

请建议一种更好的方法。

如果您对第二天的感兴趣我建议使用
java.time.LocalDate
而不是
java.util.Date

下面的代码接受这样一个
LocalDate
和一个
String
(该字符串必须是一周中的一整天,大写),并返回
LocalDate
,表示最近的未来日期,该日期具有给定的一周中的一天:

public static LocalDate nextDay(LocalDate sourceDay, String weekday) {
    // parse the day of week to an enum value
    DayOfWeek dayOfWeek = DayOfWeek.valueOf(weekday);
    // check if the day is the same as the one of the given LocalDate
    if (sourceDay.getDayOfWeek().equals(dayOfWeek)) {
        // and return the LocalDate that's a week later
        return sourceDay.plusWeeks(1);
    } else {
        // otherwise add a day to the given date
        LocalDate nextDayOfWeek = sourceDay.plusDays(1);
        // and do that until the day of week of the given date is reached
        while (nextDayOfWeek.getDayOfWeek() != dayOfWeek) {
            nextDayOfWeek = nextDayOfWeek.plusDays(1);
        }
        // then return the future date
        return nextDayOfWeek;
    }
}
您可以在
main
中使用它,如下所示:

    public static void main(String[] args) {
        System.out.println(nextDay(LocalDate.now(), "FRIDAY")
                            .format(DateTimeFormatter.ofPattern("uuuu-MM-dd '('EEEE')'",
                                    Locale.ENGLISH)));
    }
产出(今天)⇒ <代码>2020-09-23):

2020-09-25(星期五)
使用“新建”
java.time.DayOfWeek
java.time.LocalDate
类:

public LocalDate getNextDay(
最终LocalDate值,
星期五的最后一天
)
{
int currentDay=value.getDayOfWeek().getValue();
int expectedDay=day.getValue();
如果(当前日期>=预期日期)
{
预期天数+=7天;
}
返回值。plusDays(expectedDay-currentDay);
}

我建议您使用
java.time
date-time API执行此操作。从了解有关现代日期时间API的更多信息。
java.util
date-time API和
SimpleDataFormat
已经过时,并且容易出错。若您不使用Java-8,您仍然可以通过库使用Java-8日期时间API

输出:

2020-09-28
2020-09-30
2020-09-28
2020-09-23

您好,您能解释一下为什么这段代码不能正常工作吗?您是否对
java.util.Date
特别感兴趣,或者您想要一个更好的类以及更好的方法来实现这一点?@matthiasbe嘿,这对我有用,我只是想知道有没有更好的方法same@MizbaChougle-如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。公认的答案有助于未来的访问者自信地使用解决方案。要将答案标记为已接受,您需要单击大复选标记(✓) 答案左边。您也可以查看以了解更多信息。请注意,对于一个问题,您只能接受一个答案。但是,如果您有15+的声誉点数,您可以根据自己的意愿向上投票。
2020-09-28
2020-09-30
2020-09-28
2020-09-23