有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在LocalTime中查找与下一个DayOfWeek对应的日期

给定LocalDateTime myDateDayOfWeek dayLocalTime time,获得myDate的下一个日期(我们称之为LocalDateTime next)的最简单方法是什么,这样next的一周中的一天是day,而^}的时间是^}

例如:

  • 如果{}是2019-04-14 16:00:00(星期日),{}是星期一,{}是01:00:00,那么{}将是2019-04-15 01:00:00
  • 如果myDate是2019-04-14 16:00:00(星期日),day是星期日,time是16:10:00,那么next将是2019-04-14 16:10:00
  • 如果{}是2019-04-14 16:00:00(星期日),{}是星期日,{}是15:59:00,那么{}将是2019-04-21 15:59:00

共 (2) 个答案

  1. # 1 楼答案

    我将首先计算要添加多少天的值。这可以通过使用DayOfWeekgetValue()方法来实现,该方法返回星期几的int值。 这些数值按照ISO-8601标准进行编号,从1(星期一)到7(星期日)。对于上面给出的示例,它看起来像:

    day.getValue() - myDate.getDayOfWeek().getValue();
    

    如果是负数,就加7。如果为空,即如果您的时间变量在myDate变量的时间部分之前,则比较星期的同一天:

    public static void main(String[] args) {
    
        DateTimeFormatter ldt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        DateTimeFormatter lt = DateTimeFormatter.ofPattern("HH:mm:ss");
    
        LocalDateTime myDate = LocalDateTime.parse("2019-04-14 16:00:00", ldt);
        DayOfWeek day = DayOfWeek.MONDAY;
        LocalTime time = LocalTime.parse("01:00:00", lt);
    
        LocalDateTime next = getNext(myDate,day,time);
        System.out.println(next.format(ldt));
    }
    public static LocalDateTime getNext(LocalDateTime ldt, DayOfWeek dow, LocalTime lt){  
        int daysToAdd = dow.getValue() - ldt.getDayOfWeek().getValue();
        daysToAdd = daysToAdd < 0 ? daysToAdd +7 : daysToAdd;
        if(daysToAdd == 0 ){
            daysToAdd = LocalTime.of(ldt.getHour(), ldt.getMinute(), ldt.getSecond()).isAfter(lt) ? 7:0;
        }
        return LocalDateTime.of(ldt.getYear(), ldt.getMonthValue(), ldt.getDayOfMonth(), 
                                lt.getHour(), lt.getMinute(), lt.getSecond())
                               .plusDays(daysToAdd);
    }
    
  2. # 2 楼答案

    您需要使用临时调整器。下面是一个简单的例子:

    LocalDateTime dt = LocalDateTime.now();
    System.out.println("\nNext Friday: "+dt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)));
    

    当然,您需要添加逻辑来更改一天中的时间